[squeak-dev] The Trunk: Chronology-Core-dtl.68.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Jul 4 20:17:59 UTC 2021

David T. Lewis uploaded a new version of Chronology-Core to project The Trunk:

==================== 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.


=============== 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
  				"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

More information about the Squeak-dev mailing list