Timestamp.st
changeset 11140 130dd8b62622
parent 11126 146ee0b7806e
child 11177 f5faa6cb49ed
--- a/Timestamp.st	Wed Aug 20 22:37:53 2008 +0200
+++ b/Timestamp.st	Wed Aug 20 22:38:26 2008 +0200
@@ -490,25 +490,33 @@
         or (us-format, for Travis) mm/dd/yyyy hh:mm:ss.iii.
      On error, raise an exception"
 
-    |firstNumber secondNumber day month year hour min sec millis usFormat|
+    |firstNumber secondNumber day month year hour min sec millis usFormat possibeMonthName|
 
     firstNumber := Integer readFrom:aStream onError:[ConversionError raiseErrorString:' - integer expected'].
     firstNumber > 31 ifTrue:[
         "/ assume iso8601 format;
         ^ self readIso8601FormatFrom:aStream yearAlreadyRead:firstNumber.
     ].
+    aStream skipSeparators.
 
     "/ consider this a kludge
     usFormat := (aStream peek == $/ ).
 
-    [aStream peek isDigit] whileFalse:[aStream next].
-    secondNumber := Integer readFrom:aStream onError:-1.
+    [aStream peek isLetterOrDigit] whileFalse:[aStream next].
+    aStream peek isDigit ifTrue:[
+        secondNumber := Integer readFrom:aStream onError:-1.
 
-    usFormat ifTrue:[
-        month := firstNumber.
-        day := secondNumber.
+        usFormat ifTrue:[
+            month := firstNumber.
+            day := secondNumber.
+        ] ifFalse:[
+            month := secondNumber.
+            day := firstNumber.
+        ].
+
     ] ifFalse:[
-        month := secondNumber.
+        possibeMonthName := aStream throughAnyForWhich:[:ch | ch isLetter].
+        month := Date indexOfMonth:possibeMonthName asLowercase.
         day := firstNumber.
     ].
 
@@ -518,27 +526,31 @@
     [aStream peek isDigit] whileFalse:[aStream next].
     year := Integer readFrom:aStream onError:[ ConversionError raiseErrorString:' - bad year' ].
 
-    [aStream peek isDigit] whileFalse:[aStream next].
-    hour := Integer readFrom:aStream onError:-1.
-    (hour between:0 and:24) ifFalse:[ ConversionError raiseErrorString:' - bad hour' ].
-
-    [aStream peek isDigit] whileFalse:[aStream next].
-    min := Integer readFrom:aStream onError:-1.
-    (min between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad minute' ].
-
     aStream atEnd ifTrue:[
-        sec := millis := 0.
+        hour := min := sec := millis := 0.
     ] ifFalse:[
         [aStream peek isDigit] whileFalse:[aStream next].
-        sec := Integer readFrom:aStream onError:-1.
-        (sec between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad second' ].
+        hour := Integer readFrom:aStream onError:-1.
+        (hour between:0 and:24) ifFalse:[ ConversionError raiseErrorString:' - bad hour' ].
+
+        [aStream peek isDigit] whileFalse:[aStream next].
+        min := Integer readFrom:aStream onError:-1.
+        (min between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad minute' ].
 
-        aStream peek = $. ifTrue:[
-            aStream next.
-            millis := Integer readFrom:aStream onError:0.
-            millis >= 1000 ifTrue:[ ConversionError raiseErrorString:' - bad millisecond' ].
+        aStream atEnd ifTrue:[
+            sec := millis := 0.
         ] ifFalse:[
-            millis := 0.
+            [aStream peek isDigit] whileFalse:[aStream next].
+            sec := Integer readFrom:aStream onError:-1.
+            (sec between:0 and:59) ifFalse:[ ConversionError raiseErrorString:' - bad second' ].
+
+            aStream peek = $. ifTrue:[
+                aStream next.
+                millis := Integer readFrom:aStream onError:0.
+                millis >= 1000 ifTrue:[ ConversionError raiseErrorString:' - bad millisecond' ].
+            ] ifFalse:[
+                millis := 0.
+            ].
         ].
     ].
 
@@ -1394,6 +1406,7 @@
     "
 ! !
 
+
 !Timestamp methodsFor:'visiting'!
 
 acceptVisitor:aVisitor with:aParameter
@@ -1404,7 +1417,7 @@
 !Timestamp class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Timestamp.st,v 1.114 2008-08-06 10:16:48 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Timestamp.st,v 1.115 2008-08-20 20:38:26 cg Exp $'
 ! !
 
 Timestamp initialize!