Oh, i thought this comes from Pharo. So i copied this method and proposed to include in trunk as well. Not sure its integrated though (i placed it into inbox). 2010/1/21 Göran Krampe <goran@krampe.se>:
Hi guys!
I admit not having tracked this thread in detail BUT attached is a changeset that I dug out from the Squeak beginners list where I posted it waaay back. The added Date class method included below shows what it offers.
And of course, there are TONS of more cool stuff it could handle, but it is meant to be "smart enough" for a reasonable set of cases. ...And it was an "hour hack" ... :)
regards, Göran -----------------------------
readFrom: inputStream pattern: pattern     "Read a Date from the stream based on the pattern which can include the tokens:
        y = A year with 1-n digits         yy = A year with 2 digits         yyyy = A year with 4 digits         m = A month with 1-n digits         mm = A month with 2 digits         d = A day with 1-n digits         dd = A day with 2 digits
    ...and any other Strings inbetween. Representing $y, $m and $d is done using     \y, \m and \d and slash itself with \\. Simple example patterns:
        'yyyy-mm-dd'         'yyyymmdd'         'yy.mm.dd'         'y-m-d'
    A year given using only two decimals is considered to be >2000."
    | day month year patternStream char |     patternStream := pattern readStream.     [patternStream atEnd] whileFalse: [         inputStream atEnd ifTrue: [^nil].         char := patternStream next.         char = $\             ifTrue: [inputStream next = patternStream next ifFalse: [^nil]]             ifFalse: [                 char = $y                     ifTrue: [                         (patternStream nextMatchAll: 'yyy')                             ifTrue: [year := (inputStream next: 4) asInteger]                             ifFalse: [
 (patternStream peekFor: $y)
 ifTrue: [
  year := (inputStream next: 2) asInteger]
 ifFalse: [
  year := Integer readFrom: inputStream]]]                     ifFalse: [                         char = $m                             ifTrue: [
 (patternStream peekFor: $m)
 ifTrue: [
  month := (inputStream next: 2) asInteger]
 ifFalse: [
  month := Integer readFrom: inputStream]]                             ifFalse: [                                 char = $d
 ifTrue: [
  (patternStream peekFor: $d)
      ifTrue: [
          day := (inputStream next: 2) asInteger]
      ifFalse: [
          day := Integer readFrom: inputStream]]
 ifFalse: [
  inputStream next = char ifFalse: [^nil]]]]]].     (year isNil | month isNil | day isNil) ifTrue: [^nil].     ^self year: year month: month day: day! !
_______________________________________________ Pharo-project mailing list Pharo-project@lists.gforge.inria.fr http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
-- Best regards, Igor Stasenko AKA sig.