Forum: Ruby Date.parse 1.8 vs 1.9

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Michael G. (Guest)
on 2009-04-15 04:39
(Received via mailing list)
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.
Rob B. (Guest)
on 2009-04-15 05:44
(Received via mailing list)
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:in `parse'
  from (irb):2
  from /usr/local/bin/macirb:12:in `<main>'
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
Michael G. (Guest)
on 2009-04-15 05:55
(Received via mailing list)
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. :)

Michael G.
Roger P. (Guest)
on 2009-04-15 06:37
>>> 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" [?]
botp (Guest)
on 2009-04-15 06:46
(Received via mailing list)
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
Brian C. (Guest)
on 2009-04-15 13:30
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
This topic is locked and can not be replied to.