caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Dario Teixeira <darioteixeira@yahoo.com>
To: caml-list@inria.fr
Subject: [Caml-list] Localising timestamps
Date: Wed, 9 Feb 2011 07:34:39 -0800 (PST)	[thread overview]
Message-ID: <670846.47961.qm@web111516.mail.gq1.yahoo.com> (raw)

Hi,

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 [1] 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 [2], but it
also reveals that it is unlikely to change.

So, my question is if someone is aware of some alternative library (C/C++,
so it's easy to build the FFI for it) that provides this same functionality.
Janestreet's Core seems to include a native parser of zoneinfo data, but
it's also tightly integrated with the rest of Core, which may make plundering
this code problematic. Ideally, these routines should at some point be part
of Calendar or Batteries -- are there plans to include them?

Best regards,
Dario Teixeira

[1] http://en.wikipedia.org/wiki/Tz_database
[2] http://sources.redhat.com/bugzilla/show_bug.cgi?id=11620



      


             reply	other threads:[~2011-02-09 15:34 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-09 15:34 Dario Teixeira [this message]
2011-02-09 17:46 ` Eric Cooper
2011-02-09 18:22   ` Dario Teixeira

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=670846.47961.qm@web111516.mail.gq1.yahoo.com \
    --to=darioteixeira@yahoo.com \
    --cc=caml-list@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).