FW: C/C++ library that parses TZ data?

Derick Rethans derick at derickrethans.nl
Wed Feb 9 16:36:21 UTC 2011


On Wed, 9 Feb 2011, Olson, Arthur David (NIH/NCI) [E] wrote:

> I have a problem which is fairly common when one is running a web application
> that wishes to display timestamps localised towards each user's time zone.
> Basically, I need a function that takes as input a timestamp in UTC and 
> a time zone specified in the Zoneinfo convention (ex: "Europe/Lisbon"),
> and returns the localised version of that timestamp, including a time zone
> abbreviation aware of daylight savings.  Example:
> 
> 2010-01-01 15:30, "Europe/Lisbon"       -> 2010-01-01 15:30 WET
> 2010-01-01 15:30, "Europe/Paris"        -> 2010-01-01 16:30 CET
> 
> 2010-07-01 15:30, "Europe/Lisbon"       -> 2010-07-01 16:30 WEST
> 2010-07-01 15:30, "Europe/Paris"        -> 2010-07-01 17:30 CEST
> 
> Since the zoneinfo data is present in every Unix system and glibc includes
> routines for parsing it, interfacing with glibc seemed the obvious solution.
> Unfortunately, glibc was not designed with this use case in mind.  In fact,
> the glibc interface to zoneinfo can be described as "sui generis" if one
> is feeling charitable, or "insane" if truth must be told.  Specifically, to
> obtain the localised version of a given timestamp, one must first set the 'TZ'
> environment variable with the target timezone, and then invoke 'localtime'.
> The abbreviated name of the timezone can be found in the global 'tzname'
> array: at position 'tzname[0]' if daylight savings are not in effect and at
> position 'tzname[1]' if they are.  A quick search through glibc's bugzilla
> shows I'm not the only one to find this interface anachronistic [1], but it
> also reveals that it is unlikely to change.
> 
> So, my question is if someone is aware of some alternative library in C 
> or C++ that provides this same functionality, but is friendlier towards
> concurrent applications.

I've written "timelib"; which is also part of the core of PHP's 
date/time functionality. It's not the most brilliant piece of code, but 
it does do the trick: 
http://svn.xdebug.org/cgi-bin/viewvc.cgi/timelib/trunk/?root=php
(svn co http://svn.xdebug.org/svn/php/timelib/trunk timelib)

cheers,
Derick

-- 
http://derickrethans.nl | http://xdebug.org
Like Xdebug? Consider a donation: http://xdebug.org/donate.php
twitter: @derickr and @xdebug



More information about the tz mailing list