Sven (the author of many cool Pharo packages: JSON, STON, CSV, HTTP, HTTPS) released a new version of ZTimestamp. Here is his announce:
I just added a first version of timezone support to the ZTimestamp project – a small, lightweight, non-intrusive, self-dependent alternative to DateAndTime and friends. With this addition, it is now possible to work with UTC/GMT timestamps internally yet present correctly localised timestamps in any timezone, based on the standard Olsen database. ZTimestampFormat was extended with optional timezone support.
ZTimestamp can be loaded most easily from the Pharo 2 or 3 Configuration Browser.
From the class comment of ZTimezone
I am ZTimezone, representing the timezone information in the standard Olsen database.
You reference timezones by their ID. The list of supported identifiers is accessible using
To access a timezone do
ZTimezone id: ‘Europe/Brussels’.
The necessary information will be loaded, parsed and cached from a binary file of the zoneinfo database (see also man tzfile). This should work automagically on Mac OS X and Unix, on Windows you have to download the necessary files and specify their location
ZTimezone zoneInfoLocation: FileLocator C / ‘foo’ / ‘bar’ / ‘zoneinfo’.
Once you get a handle on a timezone, the main operation is to query the sub timezone that is applicable at a certain point in time
(ZTimezone id: ‘Europe/Brussels’) subzoneForTimestamp: ZTimestamp now.
The ZSubTimezone instance returned contains information like the UTC offset. Since you’ll probably only be interested in that aspect there is a convenience method
(ZTimezone id: ‘Europe/Brussels’) offsetForTimestamp: DateAndTime now.
The flow is that for every GMT timestamp, you get the concrete offset to use for a specific timezone. Note that this is not a constant, it depends on the time periode the timestamp falls in.
The are 2 more convenience methods to quickly convert between GTM and local wall time
(ZTimezone id: #’Europe/Brussels’) gmtToLocal: ZTimestamp now.
(ZTimezone id: #’Europe/Brussels’) localToGmt: DateAndTime now.
Also note the zoneTab and the timezones are cached in the image. When the TZ database changes, it might be necessary to either call #cleanUp or #reloadAll. When moving images between machines, either all info should be loaded and cached, or it might be necessary to use #zoneInfoLocation: again.
A chronological array of transition points in unix time specifies which sub zone is active from that point on to the next.