[OpenSIPS-Users] Best practices inquiry: database timezone
Phil Vandry
vandry at TZoNE.ORG
Tue Mar 31 04:55:17 CEST 2009
I would like to know what the common practice is for dealing with the
interaction of timezones with timestamps in the OpenSIPS database.
I think it is certainly clear that storing timestamps as local time is
a very bad idea in locales with daylight savings time. You can end up
with ambiguous times and durations! For example, if your database
shows a call that started at 1:30 and ended at 2:30 on the night that
daylight savings time ended (at 2:00) then it is impossible to tell
whether the call lasted one hour or two hours (it might have started
at 1:30 daylight time and extended 2 hours until 2:30 standard time,
or it might have started at 1:30 standard time and gone for one hour
until 2:30 standard time). How will you rate that call?
Even for timestamps that are not ambiguous, timestamps arithmetic with
daylight savings time accounted for is still a nightmare.
My feeling is that even in locales without daylight savings time, it's
cleaner and more robust to store all timestamps in the database at
UTC, especially if you have interconnected systems locales in
different timezones. You can of course convert everything to local
time as needed when you extract it.
On the other hand, OpenSIPS uses local time in database timestamps.
The functions (in db_ut.c) shared by all databases supported by
OpenSIPS that format and parse timestamps do so in local time.
One option for using UTC in the database is to run OpenSIPS itself
under UTC (set the TZ environment variable to UTC in OpenSIPS's
environment). This might have some unexpected effects though, for
example if the script cares about local time (local time will equal
UTC).
Another option is to change the OpenSIPS database utility functions to
convert timestamps for the database as UTC. (unfortunately there only
exists a portable API in C to do this in one direction, not in the
other.)
How do you handle the timezone problem in the database? Options:
- Ignore the problem, billing records might be incorrect by one hour
during daylight savings time transitions
- Run opensips with TZ=UTC
- Run the whole host machine under UTC timezone.
- something else?
-Phil
More information about the Users
mailing list