Date.parse 1.8 vs 1.9


#1

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 G.


#2

On Apr 14, 2009, at 8:39 PM, Michael G. wrote:

Ruby 1.9:
Michael G.

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
irb> require ‘date’
=> true
irb> 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:inparse’
from (irb):2
from /usr/local/bin/macirb:12:in `’
irb> puts Date.strptime(“4/30/2009”, “%m/%d/%Y”)
2009-04-30
=> nil
irb> RUBY_VERSION
=> “1.9.0”

-Rob

Rob B. http://agileconsultingllc.com
removed_email_address@domain.invalid


#3

On Tue, Apr 14, 2009 at 9:43 PM, Rob B.
removed_email_address@domain.invalid wrote:

2009-04-12

ArgumentError: invalid date
=> nil
irb> RUBY_VERSION
=> “1.9.0”

Thanks Rob! If you would have came to Cincinnati.rb tonight you could
have told me in person. :slight_smile:

Michael G.


#4

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?

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” [?]


#5

Roger P. wrote:

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


#6

On Wed, Apr 15, 2009 at 8:39 AM, Michael G. removed_email_address@domain.invalid
wrote:

I am sure I am not the first person to run across this issue. What is

fwiw, i prefer current ruby1.9 behaviour primarily because

Date.parse(“2009/4/30”) == Date.parse(“30/4/2009”) #=>true

thus, i do not have this issue since i always enter dates strings in
yyyy/mm/dd or dd/mm/yyyy format

kind regards -botp