David T. Lewis uploaded a new version of Chronology-Core to project The Trunk: http://source.squeak.org/trunk/Chronology-Core-dtl.68.mcz
==================== Summary ====================
Name: Chronology-Core-dtl.68 Author: dtl Time: 4 July 2021, 4:17:58.647324 pm UUID: 583e7bf7-ac3c-4ff3-9217-22e3045ec5b5 Ancestors: Chronology-Core-dtl.67, Chronology-Core-ct.52
Merge Chronology-Core-ct.52
The 'Z' format in Java's SimpleDateFormat is documented as support for RFC 822 time zone specifications (used in email), whereas our DateAndTime class>>readFrom: is used to parse ISO 8601 format date strings. So on the face of it, this enhancement seems out of place for the Squeak parser. However, if we can believe Wikipedia, it would also be considered as a valid ISO 8601 offset specifier. Merged.
References: https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html https://en.wikipedia.org/wiki/ISO_8601#Time_offsets_from_UTC
=============== Diff against Chronology-Core-dtl.67 ===============
Item was changed: ----- Method: DateAndTime class>>readFrom: (in category 'squeak protocol') ----- readFrom: aStream
+ | yearMonthDay hourMinuteSecondNano offsetSeconds | - | offsetSeconds ch yearMonthDay hourMinuteSecondNano offset |
yearMonthDay := Date readYearMonthDayFrom: aStream. [aStream peek isDigit] whileFalse: [aStream next]. hourMinuteSecondNano := Time readHourMinuteSecondNanoFrom: aStream. (aStream atEnd or: [('+-Z' includes: aStream peek) not]) ifTrue: [ self flag: #FIXME. "Different unit tests have conflicting opinions as to whether the current local offset should be used as a default. However, the current local offset cannot be correct due to DST (offset is itself a function of the point in time). Nevertheless, this is a reasonable default considering that the offset would have been explicitly part of the date string if it was a matter of concern. Unit tests will require updates to match this assumption." "offsetSeconds := 0" offsetSeconds := self localOffsetSeconds] ifFalse: [(aStream peekFor: $Z) ifTrue: [offsetSeconds := 0] + ifFalse: [ | ch offsetString offset | - ifFalse: [ ch := aStream next. ch = $+ ifTrue: [ch := Character space]. + offsetString := aStream upToEnd. + (offsetString atLast: 3 ifAbsent: ['']) = $: + ifFalse: [offsetString := (offsetString allButLast: 2) , ':' , (offsetString last: 2)]. + offset := Duration fromString: ch asString, '0:', offsetString, ':0'. - offset := Duration fromString: ch asString, '0:', aStream upToEnd, ':0'. offsetSeconds := offset asSeconds]]. ^ self year: yearMonthDay first month: yearMonthDay second day: yearMonthDay third hour: hourMinuteSecondNano first minute: hourMinuteSecondNano second second: hourMinuteSecondNano third nanoSecond: hourMinuteSecondNano fourth offsetSeconds: offsetSeconds
" '-1199-01-05T20:33:14.321-05:00' asDateAndTime ' 2002-05-16T17:20:45.1+01:01' asDateAndTime
' 2002-05-16T17:20:45.02+01:01' asDateAndTime
' 2002-05-16T17:20:45.003+01:01' asDateAndTime
' 2002-05-16T17:20:45.0004+01:01' asDateAndTime ' 2002-05-16T17:20:45.00005' asDateAndTime ' 2002-05-16T17:20:45.000006+01:01' asDateAndTime
' 2002-05-16T17:20:45.0000007+01:01' asDateAndTime ' 2002-05-16T17:20:45.00000008-01:01' asDateAndTime ' 2002-05-16T17:20:45.000000009+01:01' asDateAndTime ' 2002-05-16T17:20:45.0000000001+01:01' asDateAndTime
' 2002-05-16T17:20' asDateAndTime ' 2002-05-16T17:20:45' asDateAndTime ' 2002-05-16T17:20:45+01:57' asDateAndTime ' 2002-05-16T17:20:45-02:34' asDateAndTime ' 2002-05-16T17:20:45+00:00' asDateAndTime ' 1997-04-26T01:02:03+01:02:3' asDateAndTime + + ' 1970-01-01T00:00:00.000+0000' asDateAndTime "!
packages@lists.squeakfoundation.org