Chris Muller uploaded a new version of Chronology-Core to project The Inbox:
http://source.squeak.org/inbox/Chronology-Core-cmm.15.mcz ==================== Summary ==================== Name: Chronology-Core-cmm.15 Author: cmm Time: 18 October 2018, 3:06:21.843002 pm UUID: 388f1031-54aa-49b4-a070-726ae1d5f489 Ancestors: Chronology-Core-tcj.12 - Add Timespan>>#beCanonical so that dates created via "myDateAndTime asDate" can be made canonical. - A fix and optimization of Timespan>>#=. Both elements being compared must have the same timezone (or same state of #noTimezone) in order to take advantage of the optimized #hasEqualTicks: comparison. Otherwise (if different timezones), a full comparison of their starts (via #=) is needed. - There was a mention of this optimization put into the class comment. This level of detail may be a bit tedious for users to read at that level, so Brents original comment was restored. =============== Diff against Chronology-Core-tcj.12 =============== Item was changed: Magnitude subclass: #Timespan instanceVariableNames: 'start duration' classVariableNames: '' poolDictionaries: '' category: 'Chronology-Core'! + !Timespan commentStamp: 'cmm 10/17/2018 22:00' prior: 0! + I represent a duration starting on a specific DateAndTime.! - !Timespan commentStamp: 'bf 2/18/2016 14:43' prior: 0! - I represent a duration starting on a specific DateAndTime. - - If my start has an offset identical to my #defaultOffset then comparisons ignore timezone offset.! Item was changed: ----- Method: Timespan>>= (in category 'ansi protocol') ----- = comparand + ^ self class = comparand class + and: [(((self noTimezone and: [comparand noTimezone]) or: [self start offset = comparand start offset]) + ifTrue: [ self start hasEqualTicks: comparand start ] + ifFalse: [ self start = comparand start ]) + and: [ self duration = comparand duration ] ] - ^ self class = comparand class - and: [((self noTimezone or: [ comparand noTimezone ]) - ifTrue: [ self start hasEqualTicks: comparand start ] - ifFalse: [ self start = comparand start ]) - and: [ self duration = comparand duration ] ] .! Item was added: + ----- Method: Timespan>>beCanonical (in category 'squeak protocol') ----- + beCanonical + "Make the receiver a canonical Date (or Month or Year) instead of a timespan of my duration starting at a specific local time. Canonical are the most common use of Dates in applications." + self stripTimezone! Item was added: + ----- Method: Timespan>>stripTimezone (in category 'squeak protocol') ----- + stripTimezone + "Chronology preserves Timespans that are extracted from DateAndTime's, making Dates, Months and Years in Squeak able to represent a true Timespan of those durations starting at a specific local DateAndTime. In case a canonical version is needed, make the receiver independent of any Timezone by removing it." + start primOffset: self class defaultOffset! |
This one adds #beCanonical, for whenever you want canonical Dates from
a DateAndTime... (the usual case) myDateAndTime asDate beCanonical This will compare as we expect to any other canonical date. We should have added this when we added #noTimezone since that was the replacement for the prior #makeUTC approach... On Thu, Oct 18, 2018 at 3:06 PM <[hidden email]> wrote: > > Chris Muller uploaded a new version of Chronology-Core to project The Inbox: > http://source.squeak.org/inbox/Chronology-Core-cmm.15.mcz > > ==================== Summary ==================== > > Name: Chronology-Core-cmm.15 > Author: cmm > Time: 18 October 2018, 3:06:21.843002 pm > UUID: 388f1031-54aa-49b4-a070-726ae1d5f489 > Ancestors: Chronology-Core-tcj.12 > > - Add Timespan>>#beCanonical so that dates created via "myDateAndTime asDate" can be made canonical. > - A fix and optimization of Timespan>>#=. Both elements being compared must have the same timezone (or same state of #noTimezone) in order to take advantage of the optimized #hasEqualTicks: comparison. Otherwise (if different timezones), a full comparison of their starts (via #=) is needed. > - There was a mention of this optimization put into the class comment. This level of detail may be a bit tedious for users to read at that level, so Brents original comment was restored. > > =============== Diff against Chronology-Core-tcj.12 =============== > > Item was changed: > Magnitude subclass: #Timespan > instanceVariableNames: 'start duration' > classVariableNames: '' > poolDictionaries: '' > category: 'Chronology-Core'! > > + !Timespan commentStamp: 'cmm 10/17/2018 22:00' prior: 0! > + I represent a duration starting on a specific DateAndTime.! > - !Timespan commentStamp: 'bf 2/18/2016 14:43' prior: 0! > - I represent a duration starting on a specific DateAndTime. > - > - If my start has an offset identical to my #defaultOffset then comparisons ignore timezone offset.! > > Item was changed: > ----- Method: Timespan>>= (in category 'ansi protocol') ----- > = comparand > + ^ self class = comparand class > + and: [(((self noTimezone and: [comparand noTimezone]) or: [self start offset = comparand start offset]) > + ifTrue: [ self start hasEqualTicks: comparand start ] > + ifFalse: [ self start = comparand start ]) > + and: [ self duration = comparand duration ] ] > - ^ self class = comparand class > - and: [((self noTimezone or: [ comparand noTimezone ]) > - ifTrue: [ self start hasEqualTicks: comparand start ] > - ifFalse: [ self start = comparand start ]) > - and: [ self duration = comparand duration ] ] > .! > > Item was added: > + ----- Method: Timespan>>beCanonical (in category 'squeak protocol') ----- > + beCanonical > + "Make the receiver a canonical Date (or Month or Year) instead of a timespan of my duration starting at a specific local time. Canonical are the most common use of Dates in applications." > + self stripTimezone! > > Item was added: > + ----- Method: Timespan>>stripTimezone (in category 'squeak protocol') ----- > + stripTimezone > + "Chronology preserves Timespans that are extracted from DateAndTime's, making Dates, Months and Years in Squeak able to represent a true Timespan of those durations starting at a specific local DateAndTime. In case a canonical version is needed, make the receiver independent of any Timezone by removing it." > + start primOffset: self class defaultOffset! > > |
Free forum by Nabble | Edit this page |