--- 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!