In attempting to make a small library of mine 1.9 compatible I have
run across an inconsistency in date parsing.
Ruby 1.8:
puts Date.parse("4/12/2009")
2009-04-12
puts Date.parse("4/30/2009")
2009-04-30
Ruby 1.9:
puts Date.parse("4/12/2009")
2009-12-04
puts Date.parse("4/30/2009")
ArgumentError: invalid date
I am sure I am not the first person to run across this issue. What is
the recommended way for dealing with this?
Best,
Michael Guterl
Probably with Date.strptime rather than Date.parse so you can specify a format. I'm not actually that surprised by the 04-12 v. 12-04 since the docs say that there are heuristics, but 4/30/2009 ought to be unambiguous as 2009 can't be a month or a day and 30 can't be a month.
$ macirb
require 'date'
=> true
puts Date.parse("4/30/2009")
ArgumentError: invalid date
from /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/date.rb:1023:in `new_by_frags'
from /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/date.rb:1067:in `parse'
from (irb):2
from /usr/local/bin/macirb:12:in `<main>'
I am sure I am not the first person to run across this issue. What is
the recommended way for dealing with this?
http://redmine.ruby-lang.org/issues/show/634
treats to some background of it. But doesn't explain this oddity
[unless it is just Ruby saying "you are running into danger by even
attempting to parse dd/dd/dddd because the first two dd's could
theoretically later come back to bite you" [?]
Thanks Rob! If you would have came to Cincinnati.rb tonight you could
have told me in person.
Michael Guterl
···
On Tue, Apr 14, 2009 at 9:43 PM, Rob Biedenharn <Rob@agileconsultingllc.com> wrote:
On Apr 14, 2009, at 8:39 PM, Michael Guterl wrote:
In attempting to make a small library of mine 1.9 compatible I have
run across an inconsistency in date parsing.
Ruby 1.8:
puts Date.parse("4/12/2009")
2009-04-12
puts Date.parse("4/30/2009")
2009-04-30
Ruby 1.9:
puts Date.parse("4/12/2009")
2009-12-04
puts Date.parse("4/30/2009")
ArgumentError: invalid date
I am sure I am not the first person to run across this issue. What is
the recommended way for dealing with this?
Best,
Michael Guterl
Probably with Date.strptime rather than Date.parse so you can specify a
format. I'm not actually that surprised by the 04-12 v. 12-04 since the docs
say that there are heuristics, but 4/30/2009 ought to be unambiguous as 2009
can't be a month or a day and 30 can't be a month.
$ macirb
> require 'date'
=> true
> puts Date.parse("4/30/2009")
ArgumentError: invalid date
from
/Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/date.rb:1023:in
`new_by_frags'
from
/Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/date.rb:1067:in
`parse'
from (irb):2
from /usr/local/bin/macirb:12:in `<main>'
> puts Date.strptime("4/30/2009", "%m/%d/%Y")
2009-04-30
=> nil
> RUBY_VERSION
=> "1.9.0"
http://redmine.ruby-lang.org/issues/show/634
treats to some background of it. But doesn't explain this oddity
[unless it is just Ruby saying "you are running into danger by even
attempting to parse dd/dd/dddd because the first two dd's could
theoretically later come back to bite you" [?]
It would be silly if 4/30/2009 were parsed as m=4,d=30,y=2009
but 4/5/2009 were parsed as d=4,m=5,y=2009