The Inbox: Chronology-Core-ul.22.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

The Inbox: Chronology-Core-ul.22.mcz

commits-2
Levente Uzonyi uploaded a new version of Chronology-Core to project The Inbox:
http://source.squeak.org/inbox/Chronology-Core-ul.22.mcz

==================== Summary ====================

Name: Chronology-Core-ul.22
Author: ul
Time: 14 January 2019, 1:08:48.177246 pm
UUID: 025b4802-6281-4674-937e-a345e5a6aded
Ancestors: Chronology-Core-ul.21

- added an accessor to Time's ClockPolicy, so that tests can depend on its current value
- optimized various DateAndTime methods

=============== Diff against Chronology-Core-ul.21 ===============

Item was changed:
  ----- Method: DateAndTime>>= (in category 'ansi protocol') -----
  = aDateAndTimeOrTimeStamp
  "Equal if the absolute time values match, regardless of local time transform"
+
  self == aDateAndTimeOrTimeStamp ifTrue: [ ^ true ].
+ aDateAndTimeOrTimeStamp species == DateAndTime ifFalse: [ ^false ].
+ aDateAndTimeOrTimeStamp utcMicroseconds = utcMicroseconds ifTrue: [ ^true ].
+ ^false!
- ^aDateAndTimeOrTimeStamp species == DateAndTime
- and: [ utcMicroseconds = aDateAndTimeOrTimeStamp utcMicroseconds ]!

Item was changed:
  ----- Method: DateAndTime>>asUTC (in category 'ansi protocol') -----
  asUTC
 
  localOffsetSeconds = 0 ifTrue: [ ^self ].
+ ^self copy makeUTC!
- ^self copy
- utcMicroseconds: utcMicroseconds
- offset: 0
- !

Item was changed:
  ----- Method: DateAndTime>>asUnixTime (in category 'squeak protocol') -----
  asUnixTime
  "answer number of seconds since unix epoch (midnight Jan 1, 1970, UTC)"
 
+ ^utcMicroseconds // 1000000!
- ^(self - self class unixEpoch) asSeconds!

Item was changed:
  ----- Method: DateAndTime>>dayMonthYearDo: (in category 'squeak protocol') -----
  dayMonthYearDo: aBlock
  "Evaluation the block with three arguments: day month, year."
 
+ | l n i j dd |
- | l n i j dd mm yyyy |
  l := self julianDayNumber + 68569.
  n := 4 * l // 146097.
  l := l - (146097 * n + 3 // 4).
+ i := l + 1 * 4000 // 1461001.
- i := 4000 * (l + 1) // 1461001.
  l := l - (1461 * i // 4) + 31.
  j := 80 * l // 2447.
  dd := l - (2447 * j // 80).
  l := j // 11.
- mm := j + 2 - (12 * l).
- yyyy := 100 * (n - 49) + i + l.
 
  ^ aBlock
  value: dd
+ value: -12 * l + 2 + j "month"
+ value: n - 49 * 100 + i + l "year"!
- value: mm
- value: yyyy!

Item was changed:
  ----- Method: DateAndTime>>floor (in category 'squeak protocol') -----
  floor
  "Answer a copy with magnitude rounded down to the nearest whole second"
  ^self class
+ utcMicroseconds: utcMicroseconds // 1000000 * 1000000
- utcMicroseconds: utcMicroseconds - (utcMicroseconds \\ 1000000)
  offset: localOffsetSeconds!

Item was changed:
  ----- Method: DateAndTime>>getSeconds (in category 'accessing') -----
  getSeconds
+
+ ^utcMicroseconds // 1000000 + localOffsetSeconds \\ 86400!
-
- | posixDays posixSeconds localSeconds |
- posixSeconds := utcMicroseconds // 1000000.
- localSeconds := posixSeconds + localOffsetSeconds.
- localSeconds < 0 ifTrue: [localSeconds := localSeconds \\ SecondsInDay]. "normalize"
- posixDays := localSeconds // SecondsInDay.
- ^localSeconds - (posixDays * SecondsInDay).
- !

Item was changed:
  ----- Method: DateAndTime>>julianDayNumber (in category 'squeak protocol') -----
  julianDayNumber
 
+ ^utcMicroseconds // 1000000 + localOffsetSeconds // 86400 + PosixEpochJulianDays!
- | posixDays posixSeconds localSeconds negativeDays |
- posixSeconds := utcMicroseconds // 1000000.
- localSeconds := posixSeconds + localOffsetSeconds.
- negativeDays := 0.
- localSeconds < 0 ifTrue: [ "normalize"
- negativeDays := localSeconds // SecondsInDay.
- localSeconds := negativeDays * SecondsInDay + localSeconds].
- posixDays := localSeconds // SecondsInDay.
- ^posixDays + PosixEpochJulianDays - negativeDays.
- !

Item was changed:
  ----- Method: DateAndTime>>microsecondsFromDay:seconds:nanos:offset: (in category 'private') -----
  microsecondsFromDay: jdn seconds: s nanos: n offset: localOffsetSeconds
 
+ ^jdn - PosixEpochJulianDays "days" * 86400
+ + s - localOffsetSeconds "seconds" * 1000000
+ + (n / 1000) "nanos"!
- | days totalSeconds micros |
- days := jdn - PosixEpochJulianDays.
- totalSeconds := days * 86400 + s - localOffsetSeconds. "n.g. const 86400 is faster than SecondsInDay"
- micros := totalSeconds * 1000000.
- ^micros + (n / 1000)
- !

Item was added:
+ ----- Method: Time class>>clockPolicy (in category 'class initialization') -----
+ clockPolicy
+
+ ^ClockPolicy!


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Chronology-Core-ul.22.mcz

Eliot Miranda-2
Hi Levente,

> On Jan 14, 2019, at 4:18 AM, [hidden email] wrote:
>
> Levente Uzonyi uploaded a new version of Chronology-Core to project The Inbox:
> http://source.squeak.org/inbox/Chronology-Core-ul.22.mcz
>
> ==================== Summary ====================
>
> Name: Chronology-Core-ul.22
> Author: ul
> Time: 14 January 2019, 1:08:48.177246 pm
> UUID: 025b4802-6281-4674-937e-a345e5a6aded
> Ancestors: Chronology-Core-ul.21
>
> - added an accessor to Time's ClockPolicy, so that tests can depend on its current value
> - optimized various DateAndTime methods
>
> =============== Diff against Chronology-Core-ul.21 ===============
>
> Item was changed:
>  ----- Method: DateAndTime>>= (in category 'ansi protocol') -----
>  = aDateAndTimeOrTimeStamp
>      "Equal if the absolute time values match, regardless of local time transform"
> +
>      self == aDateAndTimeOrTimeStamp ifTrue: [ ^ true ].
> +    aDateAndTimeOrTimeStamp species == DateAndTime ifFalse: [ ^false ].
> +    aDateAndTimeOrTimeStamp utcMicroseconds = utcMicroseconds ifTrue: [ ^true ].
> +    ^false!
> -    ^aDateAndTimeOrTimeStamp species == DateAndTime
> -        and: [ utcMicroseconds = aDateAndTimeOrTimeStamp utcMicroseconds ]!

Can we please avoid the ... ifFalse: [^false] style and keep the much nicer concise and: style?  Yes, the former is slightly faster, but not by much, and the JIT has code to minimize the difference and Sista will eliminate the difference.  The former style is so ugly.

>
> Item was changed:
>  ----- Method: DateAndTime>>asUTC (in category 'ansi protocol') -----
>  asUTC
>
>      localOffsetSeconds = 0 ifTrue: [ ^self ].
> +    ^self copy makeUTC!
> -    ^self copy
> -        utcMicroseconds: utcMicroseconds
> -        offset: 0
> - !
>
> Item was changed:
>  ----- Method: DateAndTime>>asUnixTime (in category 'squeak protocol') -----
>  asUnixTime
>      "answer number of seconds since unix epoch (midnight Jan 1, 1970, UTC)"
>
> +    ^utcMicroseconds // 1000000!
> -    ^(self - self class unixEpoch) asSeconds!
>
> Item was changed:
>  ----- Method: DateAndTime>>dayMonthYearDo: (in category 'squeak protocol') -----
>  dayMonthYearDo: aBlock
>      "Evaluation the block with three arguments: day month, year."
>
> +    | l n i j dd |
> -    | l n i j dd mm yyyy |
>      l := self julianDayNumber + 68569.
>      n := 4 * l // 146097.
>      l := l - (146097 * n + 3 // 4).
> +    i := l + 1 * 4000 // 1461001.
> -    i := 4000 * (l + 1) // 1461001.
>      l := l - (1461 * i // 4) + 31.
>      j := 80 * l // 2447.
>      dd := l - (2447 * j // 80).
>      l := j // 11.
> -    mm := j + 2 - (12 * l).
> -    yyyy := 100 * (n - 49) + i + l.
>
>      ^ aBlock
>          value: dd
> +        value: -12 * l + 2 + j "month"
> +        value: n - 49 * 100 + i + l "year"!
> -        value: mm
> -        value: yyyy!
>
> Item was changed:
>  ----- Method: DateAndTime>>floor (in category 'squeak protocol') -----
>  floor
>      "Answer a copy with magnitude rounded down to the nearest whole second"
>      ^self class
> +        utcMicroseconds: utcMicroseconds // 1000000 * 1000000
> -        utcMicroseconds: utcMicroseconds - (utcMicroseconds \\ 1000000)
>          offset: localOffsetSeconds!
>
> Item was changed:
>  ----- Method: DateAndTime>>getSeconds (in category 'accessing') -----
>  getSeconds
> +    
> +    ^utcMicroseconds // 1000000 + localOffsetSeconds \\ 86400!
> -
> -    | posixDays posixSeconds localSeconds |
> -    posixSeconds := utcMicroseconds // 1000000.
> -    localSeconds := posixSeconds + localOffsetSeconds.
> -    localSeconds < 0 ifTrue: [localSeconds := localSeconds \\ SecondsInDay]. "normalize"
> -    posixDays := localSeconds // SecondsInDay.
> -    ^localSeconds - (posixDays * SecondsInDay).
> - !
>
> Item was changed:
>  ----- Method: DateAndTime>>julianDayNumber (in category 'squeak protocol') -----
>  julianDayNumber
>
> +    ^utcMicroseconds // 1000000 + localOffsetSeconds // 86400 + PosixEpochJulianDays!
> -    | posixDays posixSeconds localSeconds negativeDays |
> -    posixSeconds := utcMicroseconds // 1000000.
> -    localSeconds := posixSeconds + localOffsetSeconds.
> -    negativeDays := 0.
> -    localSeconds < 0 ifTrue: [ "normalize"
> -            negativeDays := localSeconds // SecondsInDay.
> -            localSeconds := negativeDays * SecondsInDay + localSeconds].
> -    posixDays := localSeconds // SecondsInDay.
> -    ^posixDays + PosixEpochJulianDays - negativeDays.
> - !
>
> Item was changed:
>  ----- Method: DateAndTime>>microsecondsFromDay:seconds:nanos:offset: (in category 'private') -----
>  microsecondsFromDay: jdn seconds: s nanos: n offset: localOffsetSeconds
>
> +    ^jdn - PosixEpochJulianDays "days" * 86400
> +        + s - localOffsetSeconds "seconds" * 1000000
> +        + (n / 1000) "nanos"!
> -    | days totalSeconds micros |
> -    days := jdn - PosixEpochJulianDays.
> -    totalSeconds := days * 86400 + s - localOffsetSeconds. "n.g. const 86400 is faster than SecondsInDay"
> -    micros := totalSeconds * 1000000.
> -    ^micros + (n / 1000)
> - !
>
> Item was added:
> + ----- Method: Time class>>clockPolicy (in category 'class initialization') -----
> + clockPolicy
> +
> +    ^ClockPolicy!
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Chronology-Core-ul.22.mcz

David T. Lewis
This is a good set of cleanups, with an overall performance improvement.

+1 for moving the changes to trunk, with or without the DateAndTime>>#=  change.

I somewhat agree with Eliot's comment below, although I am happy either way.

Dave


On Mon, Jan 14, 2019 at 07:07:23AM -0800, Eliot Miranda wrote:

> Hi Levente,
>
> > On Jan 14, 2019, at 4:18 AM, [hidden email] wrote:
> >
> > Levente Uzonyi uploaded a new version of Chronology-Core to project The Inbox:
> > http://source.squeak.org/inbox/Chronology-Core-ul.22.mcz
> >
> > ==================== Summary ====================
> >
> > Name: Chronology-Core-ul.22
> > Author: ul
> > Time: 14 January 2019, 1:08:48.177246 pm
> > UUID: 025b4802-6281-4674-937e-a345e5a6aded
> > Ancestors: Chronology-Core-ul.21
> >
> > - added an accessor to Time's ClockPolicy, so that tests can depend on its current value
> > - optimized various DateAndTime methods
> >
> > =============== Diff against Chronology-Core-ul.21 ===============
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>= (in category 'ansi protocol') -----
> >  = aDateAndTimeOrTimeStamp
> >      "Equal if the absolute time values match, regardless of local time transform"
> > +
> >      self == aDateAndTimeOrTimeStamp ifTrue: [ ^ true ].
> > +    aDateAndTimeOrTimeStamp species == DateAndTime ifFalse: [ ^false ].
> > +    aDateAndTimeOrTimeStamp utcMicroseconds = utcMicroseconds ifTrue: [ ^true ].
> > +    ^false!
> > -    ^aDateAndTimeOrTimeStamp species == DateAndTime
> > -        and: [ utcMicroseconds = aDateAndTimeOrTimeStamp utcMicroseconds ]!
>
> Can we please avoid the ... ifFalse: [^false] style and keep the much nicer concise and: style?  Yes, the former is slightly faster, but not by much, and the JIT has code to minimize the difference and Sista will eliminate the difference.  The former style is so ugly.
>
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>asUTC (in category 'ansi protocol') -----
> >  asUTC
> >
> >      localOffsetSeconds = 0 ifTrue: [ ^self ].
> > +    ^self copy makeUTC!
> > -    ^self copy
> > -        utcMicroseconds: utcMicroseconds
> > -        offset: 0
> > - !
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>asUnixTime (in category 'squeak protocol') -----
> >  asUnixTime
> >      "answer number of seconds since unix epoch (midnight Jan 1, 1970, UTC)"
> >
> > +    ^utcMicroseconds // 1000000!
> > -    ^(self - self class unixEpoch) asSeconds!
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>dayMonthYearDo: (in category 'squeak protocol') -----
> >  dayMonthYearDo: aBlock
> >      "Evaluation the block with three arguments: day month, year."
> >
> > +    | l n i j dd |
> > -    | l n i j dd mm yyyy |
> >      l := self julianDayNumber + 68569.
> >      n := 4 * l // 146097.
> >      l := l - (146097 * n + 3 // 4).
> > +    i := l + 1 * 4000 // 1461001.
> > -    i := 4000 * (l + 1) // 1461001.
> >      l := l - (1461 * i // 4) + 31.
> >      j := 80 * l // 2447.
> >      dd := l - (2447 * j // 80).
> >      l := j // 11.
> > -    mm := j + 2 - (12 * l).
> > -    yyyy := 100 * (n - 49) + i + l.
> >
> >      ^ aBlock
> >          value: dd
> > +        value: -12 * l + 2 + j "month"
> > +        value: n - 49 * 100 + i + l "year"!
> > -        value: mm
> > -        value: yyyy!
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>floor (in category 'squeak protocol') -----
> >  floor
> >      "Answer a copy with magnitude rounded down to the nearest whole second"
> >      ^self class
> > +        utcMicroseconds: utcMicroseconds // 1000000 * 1000000
> > -        utcMicroseconds: utcMicroseconds - (utcMicroseconds \\ 1000000)
> >          offset: localOffsetSeconds!
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>getSeconds (in category 'accessing') -----
> >  getSeconds
> > +    
> > +    ^utcMicroseconds // 1000000 + localOffsetSeconds \\ 86400!
> > -
> > -    | posixDays posixSeconds localSeconds |
> > -    posixSeconds := utcMicroseconds // 1000000.
> > -    localSeconds := posixSeconds + localOffsetSeconds.
> > -    localSeconds < 0 ifTrue: [localSeconds := localSeconds \\ SecondsInDay]. "normalize"
> > -    posixDays := localSeconds // SecondsInDay.
> > -    ^localSeconds - (posixDays * SecondsInDay).
> > - !
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>julianDayNumber (in category 'squeak protocol') -----
> >  julianDayNumber
> >
> > +    ^utcMicroseconds // 1000000 + localOffsetSeconds // 86400 + PosixEpochJulianDays!
> > -    | posixDays posixSeconds localSeconds negativeDays |
> > -    posixSeconds := utcMicroseconds // 1000000.
> > -    localSeconds := posixSeconds + localOffsetSeconds.
> > -    negativeDays := 0.
> > -    localSeconds < 0 ifTrue: [ "normalize"
> > -            negativeDays := localSeconds // SecondsInDay.
> > -            localSeconds := negativeDays * SecondsInDay + localSeconds].
> > -    posixDays := localSeconds // SecondsInDay.
> > -    ^posixDays + PosixEpochJulianDays - negativeDays.
> > - !
> >
> > Item was changed:
> >  ----- Method: DateAndTime>>microsecondsFromDay:seconds:nanos:offset: (in category 'private') -----
> >  microsecondsFromDay: jdn seconds: s nanos: n offset: localOffsetSeconds
> >
> > +    ^jdn - PosixEpochJulianDays "days" * 86400
> > +        + s - localOffsetSeconds "seconds" * 1000000
> > +        + (n / 1000) "nanos"!
> > -    | days totalSeconds micros |
> > -    days := jdn - PosixEpochJulianDays.
> > -    totalSeconds := days * 86400 + s - localOffsetSeconds. "n.g. const 86400 is faster than SecondsInDay"
> > -    micros := totalSeconds * 1000000.
> > -    ^micros + (n / 1000)
> > - !
> >
> > Item was added:
> > + ----- Method: Time class>>clockPolicy (in category 'class initialization') -----
> > + clockPolicy
> > +
> > +    ^ClockPolicy!
> >
> >
>

Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Chronology-Core-ul.22.mcz

Levente Uzonyi
In reply to this post by Eliot Miranda-2
Hi Eliot,

On Mon, 14 Jan 2019, Eliot Miranda wrote:

> Hi Levente,
>
>>  = aDateAndTimeOrTimeStamp
>>      "Equal if the absolute time values match, regardless of local time transform"
>> +
>>      self == aDateAndTimeOrTimeStamp ifTrue: [ ^ true ].
>> +    aDateAndTimeOrTimeStamp species == DateAndTime ifFalse: [ ^false ].
>> +    aDateAndTimeOrTimeStamp utcMicroseconds = utcMicroseconds ifTrue: [ ^true ].
>> +    ^false!
>> -    ^aDateAndTimeOrTimeStamp species == DateAndTime
>> -        and: [ utcMicroseconds = aDateAndTimeOrTimeStamp utcMicroseconds ]!
>
> Can we please avoid the ... ifFalse: [^false] style and keep the much nicer concise and: style?  Yes, the former is slightly faster, but not by much, and the JIT has code to minimize the difference and Sista will eliminate the difference.  The former style is so ugly.

I personally prefer early returns because I find them much more readable:
for every boolean term I can tell exactly how it will affect the return
value of the method, while that is a lot harder with a single boolean
expression.
I agree that the last two returns could be simplified into a single
return but I see no problem with the rest.

Levente


Reply | Threaded
Open this post in threaded view
|

Re: The Inbox: Chronology-Core-ul.22.mcz

Levente Uzonyi
In reply to this post by David T. Lewis
Thanks Dave. I'll soon upload the changes with or without #=.

Levente

On Tue, 15 Jan 2019, David T. Lewis wrote:

> This is a good set of cleanups, with an overall performance improvement.
>
> +1 for moving the changes to trunk, with or without the DateAndTime>>#=  change.
>
> I somewhat agree with Eliot's comment below, although I am happy either way.
>
> Dave
>
>
> On Mon, Jan 14, 2019 at 07:07:23AM -0800, Eliot Miranda wrote:
>> Hi Levente,
>>
>> > On Jan 14, 2019, at 4:18 AM, [hidden email] wrote:
>> >
>> > Levente Uzonyi uploaded a new version of Chronology-Core to project The Inbox:
>> > http://source.squeak.org/inbox/Chronology-Core-ul.22.mcz
>> >
>> > ==================== Summary ====================
>> >
>> > Name: Chronology-Core-ul.22
>> > Author: ul
>> > Time: 14 January 2019, 1:08:48.177246 pm
>> > UUID: 025b4802-6281-4674-937e-a345e5a6aded
>> > Ancestors: Chronology-Core-ul.21
>> >
>> > - added an accessor to Time's ClockPolicy, so that tests can depend on its current value
>> > - optimized various DateAndTime methods
>> >
>> > =============== Diff against Chronology-Core-ul.21 ===============
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>= (in category 'ansi protocol') -----
>> >  = aDateAndTimeOrTimeStamp
>> >      "Equal if the absolute time values match, regardless of local time transform"
>> > +
>> >      self == aDateAndTimeOrTimeStamp ifTrue: [ ^ true ].
>> > +    aDateAndTimeOrTimeStamp species == DateAndTime ifFalse: [ ^false ].
>> > +    aDateAndTimeOrTimeStamp utcMicroseconds = utcMicroseconds ifTrue: [ ^true ].
>> > +    ^false!
>> > -    ^aDateAndTimeOrTimeStamp species == DateAndTime
>> > -        and: [ utcMicroseconds = aDateAndTimeOrTimeStamp utcMicroseconds ]!
>>
>> Can we please avoid the ... ifFalse: [^false] style and keep the much nicer concise and: style?  Yes, the former is slightly faster, but not by much, and the JIT has code to minimize the difference and Sista will eliminate the difference.  The former style is so ugly.
>>
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>asUTC (in category 'ansi protocol') -----
>> >  asUTC
>> >
>> >      localOffsetSeconds = 0 ifTrue: [ ^self ].
>> > +    ^self copy makeUTC!
>> > -    ^self copy
>> > -        utcMicroseconds: utcMicroseconds
>> > -        offset: 0
>> > - !
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>asUnixTime (in category 'squeak protocol') -----
>> >  asUnixTime
>> >      "answer number of seconds since unix epoch (midnight Jan 1, 1970, UTC)"
>> >
>> > +    ^utcMicroseconds // 1000000!
>> > -    ^(self - self class unixEpoch) asSeconds!
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>dayMonthYearDo: (in category 'squeak protocol') -----
>> >  dayMonthYearDo: aBlock
>> >      "Evaluation the block with three arguments: day month, year."
>> >
>> > +    | l n i j dd |
>> > -    | l n i j dd mm yyyy |
>> >      l := self julianDayNumber + 68569.
>> >      n := 4 * l // 146097.
>> >      l := l - (146097 * n + 3 // 4).
>> > +    i := l + 1 * 4000 // 1461001.
>> > -    i := 4000 * (l + 1) // 1461001.
>> >      l := l - (1461 * i // 4) + 31.
>> >      j := 80 * l // 2447.
>> >      dd := l - (2447 * j // 80).
>> >      l := j // 11.
>> > -    mm := j + 2 - (12 * l).
>> > -    yyyy := 100 * (n - 49) + i + l.
>> >
>> >      ^ aBlock
>> >          value: dd
>> > +        value: -12 * l + 2 + j "month"
>> > +        value: n - 49 * 100 + i + l "year"!
>> > -        value: mm
>> > -        value: yyyy!
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>floor (in category 'squeak protocol') -----
>> >  floor
>> >      "Answer a copy with magnitude rounded down to the nearest whole second"
>> >      ^self class
>> > +        utcMicroseconds: utcMicroseconds // 1000000 * 1000000
>> > -        utcMicroseconds: utcMicroseconds - (utcMicroseconds \\ 1000000)
>> >          offset: localOffsetSeconds!
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>getSeconds (in category 'accessing') -----
>> >  getSeconds
>> > +
>> > +    ^utcMicroseconds // 1000000 + localOffsetSeconds \\ 86400!
>> > -
>> > -    | posixDays posixSeconds localSeconds |
>> > -    posixSeconds := utcMicroseconds // 1000000.
>> > -    localSeconds := posixSeconds + localOffsetSeconds.
>> > -    localSeconds < 0 ifTrue: [localSeconds := localSeconds \\ SecondsInDay]. "normalize"
>> > -    posixDays := localSeconds // SecondsInDay.
>> > -    ^localSeconds - (posixDays * SecondsInDay).
>> > - !
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>julianDayNumber (in category 'squeak protocol') -----
>> >  julianDayNumber
>> >
>> > +    ^utcMicroseconds // 1000000 + localOffsetSeconds // 86400 + PosixEpochJulianDays!
>> > -    | posixDays posixSeconds localSeconds negativeDays |
>> > -    posixSeconds := utcMicroseconds // 1000000.
>> > -    localSeconds := posixSeconds + localOffsetSeconds.
>> > -    negativeDays := 0.
>> > -    localSeconds < 0 ifTrue: [ "normalize"
>> > -            negativeDays := localSeconds // SecondsInDay.
>> > -            localSeconds := negativeDays * SecondsInDay + localSeconds].
>> > -    posixDays := localSeconds // SecondsInDay.
>> > -    ^posixDays + PosixEpochJulianDays - negativeDays.
>> > - !
>> >
>> > Item was changed:
>> >  ----- Method: DateAndTime>>microsecondsFromDay:seconds:nanos:offset: (in category 'private') -----
>> >  microsecondsFromDay: jdn seconds: s nanos: n offset: localOffsetSeconds
>> >
>> > +    ^jdn - PosixEpochJulianDays "days" * 86400
>> > +        + s - localOffsetSeconds "seconds" * 1000000
>> > +        + (n / 1000) "nanos"!
>> > -    | days totalSeconds micros |
>> > -    days := jdn - PosixEpochJulianDays.
>> > -    totalSeconds := days * 86400 + s - localOffsetSeconds. "n.g. const 86400 is faster than SecondsInDay"
>> > -    micros := totalSeconds * 1000000.
>> > -    ^micros + (n / 1000)
>> > - !
>> >
>> > Item was added:
>> > + ----- Method: Time class>>clockPolicy (in category 'class initialization') -----
>> > + clockPolicy
>> > +
>> > +    ^ClockPolicy!
>> >
>> >
>>