Hi, 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. About ZTimestamp https://ci.inria.fr/pharo-contribution/job/PharoProjectCatalog/HTML_Report/Z... https://github.com/svenvc/docs/blob/master/neo/ztimestamp.md ZTimestamp can be loaded most easily from the Pharo 2 or 3 Configuration Browser. StHub http://www.smalltalkhub.com/#!/~SvenVanCaekenberghe/Neo/packages/ZTimestamp CI job https://ci.inria.fr/pharo-contribution/job/ZTimestamp/
From the class comment of ZTimezone
https://github.com/svenvc/ztimestamp/tree/master/repository/ZTimestamp.packa... === I am ZTimezone, representing the timezone information in the standard Olsen database. http://en.wikipedia.org/wiki/Tz_database Usage You reference timezones by their ID. The list of supported identifiers is accessible using ZTimezone timezoneIdentifiers. 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. Implementation A chronological array of transition points in unix time specifies which sub zone is active from that point on to the next. === Sven