Bug #13036
closed
Date.parse mishandling spanish months "Abril y Agosto"
Added by greutter (Gonzalo Reutter) almost 8 years ago.
Updated almost 8 years ago.
Description
Steps to reproduce¶
$ irb
2.3.0 :003 > Date.parse("01-Agosto-2016")
=> 01 Dec 2016
2.3.0 :004 > Date.parse("01-Abril-2016")
=> 01 Dec 2016
Expected behavior¶
2.3.0 :003 > Date.parse("01-Agosto-2016")
=> 01 Aug 2016
2.3.0 :004 > Date.parse("01-Abril-2016")
=> 01 Apr 2016
Actual behavior¶
"Agosto" is parsed to December
"Abril" is parsed to December.
System configuration¶
Ruby 2.3.0
Would much like to fix this myself, should be straight forward, but I'm a hobby developer and have never contributed to a project.
UPDATE:¶
I tracked the problem to dates_international.rb (https://gist.github.com/jackrg/2927162)
The problem is solved replacing line 37.
From:
37: month_from = string[/[^\s\d,]+/i]
To:
37: month_from = string[/[a-z]+/i]
I don't think this is a bug, Ruby only parses English month names, it can't possibly try to check all languages in the world. When it can't deduce a month, it uses the current month, which right now is december.
AFAIK, Date.parse was NEVER intending to parse anything except English/American dates in English/American formats. Parsing dates internationally is waaaay harder than making dictionaries of month names: different cultures have different (often incompatible) date formats. Take a look at this list, for ex: https://en.wikipedia.org/wiki/Date_format_by_country
International date parser is a cool idea for standalone gem, but I don't think it could be ever expected to be in stdlib.
Even if Ruby have never intended to parse dates other than English it works quite well parsing Spanish dates. I'm quite confident that it uses dates_international.rb for the magic. I base my belief in the fact that Ruby and that code reproduce the exact same bug, buy defulting to the current month. The the problem is solved by changing line 37 from:
37: month_from = string[/[^\s\d,]+/i]
To:
37: month_from = string[/[a-z]+/i]
I extended the Date class locally to get pass the difficulty. Would like to contribute to the non English speaking Ruby community. Confirming that the suggested solution work for other languages as well and then merging to the main branch.
I would need to know exactly how the library is connected to Ruby in order to try. Help needed.
So is it a dates_international.rb's problem? Then sorry but the ruby's core do not ship that library. You might have obtained a copy of it from somewhere else. Do you remember where? Or, you might want to contact @jackrg directly. Let him know this issue and I hope he can fix it.
- Status changed from Open to Rejected
Shyouhei Urabe wrote:
So is it a dates_international.rb's problem?
Yes. But that file has other problems, among else that it only supports four additional languages (French, German, Italian, and Spanish).
Then sorry but the ruby's core do not ship that library.
Yes indeed. I searched the whole Ruby source for a distinctive month name such as "noviembre", but nothing was found.
You might have obtained a copy of it from somewhere else. Do you remember where?
Probably from https://gist.github.com/jackrg/2927162.
Or, you might want to contact @jackrg directly. Let him know this issue and I hope he can fix it.
Already done at the link above (the "let him know", not the "fix").
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0