[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Date.parse 1.8 vs 1.9

Michael Guterl

4/15/2009 12:39:00 AM

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

5 Answers

Rob Biedenharn

4/15/2009 1:44:00 AM

0


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
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 Biedenharn http://agileconsult...
Rob@AgileConsultingLLC.com

Michael Guterl

4/15/2009 1:55:00 AM

0

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. =C2=A0What=
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 d=
ocs
> say that there are heuristics, but 4/30/2009 ought to be unambiguous as 2=
009
> can't be a month or a day and 30 can't be a month.
>
> $ macirb
> irb> require 'date'
> =3D> true
> irb> puts Date.parse("4/30/2009")
> ArgumentError: invalid date
> =C2=A0 =C2=A0 =C2=A0 =C2=A0from
> /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/dat=
e.rb:1023:in
> `new_by_frags'
> =C2=A0 =C2=A0 =C2=A0 =C2=A0from
> /Library/Frameworks/MacRuby.framework/Versions/0.3/usr/lib/ruby/1.9.0/dat=
e.rb:1067:in
> `parse'
> =C2=A0 =C2=A0 =C2=A0 =C2=A0from (irb):2
> =C2=A0 =C2=A0 =C2=A0 =C2=A0from /usr/local/bin/macirb:12:in `<main>'
> irb> puts Date.strptime("4/30/2009", "%m/%d/%Y")
> 2009-04-30
> =3D> nil
> irb> RUBY_VERSION
> =3D> "1.9.0"
>

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

Michael Guterl

Roger Pack

4/15/2009 2:38:00 AM

0


>>> 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/issue...
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" [?]
--
Posted via http://www.ruby-....

botp

4/15/2009 2:46:00 AM

0

On Wed, Apr 15, 2009 at 8:39 AM, Michael Guterl <mguterl@gmail.com> wrote:
> I am sure I am not the first person to run across this issue. =A0What is

fwiw, i prefer current ruby1.9 behaviour primarily because

Date.parse("2009/4/30") =3D=3D Date.parse("30/4/2009") #=3D>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 Candler

4/15/2009 9:31:00 AM

0

Roger Pack wrote:
> http://redmine.ruby-lang.org/issue...
> 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
--
Posted via http://www.ruby-....