[squeak-dev] A UTC based implementation of DateAndTime
David T. Lewis
lewis at mail.msen.com
Wed Aug 6 02:26:06 UTC 2014
On Sun, May 25, 2014 at 01:48:44PM -0400, David T. Lewis wrote:
> I have been working on a variation of class DateAndTime that replaces its
> instance variables (seconds offset jdn nanos) with two instance variables,
> utcMicroseconds to represent microseconds elapsed since the Posix epoch, and
> localOffsetSeconds to represent the local time zone offset. When instantiating
> the time now, A single call primitiveUtcWithOffset is used to obtain these
> two values atomically as reported by the underlying platform.
I originally posted this as email to squeak-dev a couple of months ago. I have
now added a page for it on the swiki at http://wiki.squeak.org/squeak/6197 with
the original SAR file attached. I have also put the code into Monticello on SS3
at http://ss3.gemstone.com/ss/UTCDateAndTime. The SS3 repository has a few minor
updates since my original posting.
The SS3 archive has MCM update maps that, if loaded in sequence, can be used
to update a Squeak trunk image from the repository.
I'll probably put this on SqueakMap also, if I can find a nice way to do the
the updates for an arbitrary image. This is a tricky business, because instances
of DateAndTime need to change at the same time that the Monticello loader is
making heavy use of DateAndTime to load the MCZs. A good old fashioned SAR
is the safest way to handle it, but Monticello is probably more approachable for
most of us.
> There are several advantages to this representation of DateAndTime, the most
> important of which is that its magnitude is unambiguous regardless of daylight
> savings transitions in local time zones.
> This is my attempt to address some historical baggage in Squeak. The VM
> reports time related to the local time zone, and the image attempts to
> convert to UTC (sometimes incorrectly). A UTC based representation makes the
> implementation of time zone tables more straightforward (see for example
> the Olson time zone tables in TimeZoneDatabase on SqueakMap).
> I am attaching the source code as a SAR file that can be loaded into a fully
> updated Squeak trunk image. The conversion process is slow, so be patient
> if you load it.
> This can be run on either an intepreter VM or Cog, but if you use Cog, please
> use a version dated June 2013 or later (the VM in the Squeak 4.5 all-in-one
> is fine).
> I am also attaching a copy of LXTestDateAndTimePerformance, which can be
> used to compare the performance of some basic DateAndTime functions.
> Performance of the UTC based DateAndTime is generally favorable compared to
> the original. Here is what I see on my system (smaller numbers are better).
> LXTestDateAndTimePerformance test results using the original Squeak DateAndTime
> on an interpreter VM:
> #testNow->10143 .
> #testEquals->30986 .
> #testGreaterThan->80199 .
> #testLessThan->75912 .
> #testPrintString->10429 .
> LXTestDateAndTimePerformance test results using the new UTC based DateAndTime
> on an interpreter VM:
> #testNow->6423 .
> #testEquals->31625 .
> #testGreaterThan->22999 .
> #testLessThan->18514 .
> #testPrintString->12502 .
> (CC to Brent Pinkney, author of the excellent Squeak Chronology package)
More information about the Squeak-dev