don't know if this addresses your confusion:

before: '5-APR-10' got parsed as April 5, 1910
after: '5-APR-10' gets parsed as April 5, 2010

so it kind of fixes the passing of time :-)

This kind of cleverness should not be there, IMHO.

a) you want to parse special date formats:  you should use some
explicit format descriptions (that %M%D%Y stuff) and make it explicit.

b) you want to make some best effort to parse whatever string as a
date: that is a heuristic and it should be in another method, not
something as basic as #readFrom:. Maybe call the method guessFrom:
aStream ;-)

Cheers

Matthias

On Sat, Jan 16, 2010 at 10:57 AM, Stéphane Ducasse
<[email protected]> wrote:
> hi guys
>
> can one of you give a look at the this fix because I'm confused.   
> Kernel-DavidHotham.538
>
> year < 20 ifTrue: [year := 2000 + year]
>        was
> year < 10 ifTrue: [year := 2000 + year]
>
> both solutions look strange to me.
>
> http://code.google.com/p/pharo/issues/detail?id=1749
>
>
> readFrom: aStream
>        "Read a Date from the stream in any of the forms:
>                        <day> <monthName> <year>                (5 April 1982; 
> 5-APR-82)
>                        <monthName> <day> <year>                (April 5, 1982)
>                        <monthNumber> <day> <year>              (4/5/82)
>                        <day><monthName><year>                  (5APR82)"
>        | day month year |
>        aStream peek isDigit
>                ifTrue: [day := Integer readFrom: aStream].
>        [aStream peek isAlphaNumeric]
>                whileFalse: [aStream skip: 1].
>        aStream peek isLetter
>                ifTrue: ["number/name... or name..."
>                        month := (String new: 10) writeStream.
>                        [aStream peek isLetter]
>                                whileTrue: [month nextPut: aStream next].
>                        month := month contents.
>                        day isNil
>                                ifTrue: ["name/number..."
>                                        [aStream peek isAlphaNumeric]
>                                                whileFalse: [aStream skip: 1].
>                                        day := Integer readFrom: aStream]]
>                ifFalse: ["number/number..."
>                        month := Month nameOfMonth: day.
>                        day := Integer readFrom: aStream].
>        [aStream peek isAlphaNumeric]
>                whileFalse: [aStream skip: 1].
>        year := Integer readFrom: aStream.
>>>      year < 20 ifTrue: [year := 2000 + year]
>                ifFalse: [ year < 1900 ifTrue: [ year := 1900 + year]].
>
>        ^ self
>                year: year
>                month: month
>                day: day
> _______________________________________________
> Pharo-project mailing list
> [email protected]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>

_______________________________________________
Pharo-project mailing list
[email protected]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project

Reply via email to