Time zone definitions to config files

From: "Joachim Wieland" <joe(at)mcknight(dot)de>
To: pgsql-patches(at)postgresql(dot)org
Subject: Time zone definitions to config files
Date: 2006-07-13 20:33:51
Message-ID: 0ec410b2771836780922c5c75c2159d1@
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-hackers pgsql-patches

Here's the patch that generalizes the australian_timezones hack by moving the
compiled-in time zone definitions into a text file. The text file to use is
chosen via a guc.

The patch comes with `template' files and `set' files. The template files
contain all time zones that I could find, i.e. are autogenerated from zic and
later I added other time zones manually like those from the old pgsql source.
The set files are what you can then specify in the configuration. The default
set is called `Default' and should work for like 90% of the world. A guc
parameter called `timezone_abbreviations' specifies which set to load.

to setting `australian_timezones = true' today, an Australian would set
`timezone_abbreviations = Australia' and the set called `Australia' gets
loaded. Basically this file includes the default set and overrides the time
zone information from there with the conflicting Australian time zones. This
include/override feature makes it possible to keep the local sets really

and to ship almost everything in the default set. There is another set,
`India', that also includes the default set but then defines the `IST' time
zone differently (is defined to Israel time by default).

Sets get installed to share/timezone/tznames/sets/ and templates to
Anybody can think of better names?

From a functionality point of view the template files are not necessary, they
just serve as a template to copy and paste from for someone who is missing
time zone definitions. Also you can see which time zone names do collide. I'd
vote for including them anyway into the distribution but other people might
think differently.

The set gets re-read after server start and SIGHUP. If an error occurs during
server start, the start fails. If the error occurs while reading the
definitions after SIGHUP, a warning message is issued and no changes get

The default set also changes, adds and removes a few time zones:

Changes to time zone entries:

BDST (British Double Summer Time) was not marked as DST, is now
AKST (Alaska Standard Time) was marked as DST, but is no longer
ALMST (Almaty Savings Time) was not marked as DST, is now
FKT (Falkland Islands Time) was -2 hours and is -4 now
GEST/GET (Georgia (Summer) Time) was +5/+4 and is +4/+3 now
(there was a time zone change in 2004 (-> zic))
IOT (British Indian Ocean Territory (Chagos)) was +5 and is +6 now
(there was a time zone change in 1996 (-> zic))
KOST (Kosrae Time) was +12 and is now +11
(there was a time zone change in 1999 (-> see zic))
KRAST/KRAT (Krasnoyarsk (Summer) Time) was +7/+8 and now got corrected to

RET (Reunion Island Time) was marked as DST, but is no longer
SCT (Mahe Island Time) was marked as DST, but is no longer
WAT (West Africa Time) was -1, but is +1 actually

New time zones:

PMST added for consistency, PMDT was already there
UCT - Universal Coordinated Time

Time zones names that get removed:
"(init)" means that the time zone existed already in dt.h and is like 7 years
old. The rationale to be more reluctant to remove other entries is that there
might have been a reason for why they got added.

AHST - Alaska/Hawaii Standard Time (init)
http://www.worldtimezone.com/wtz-names/wtz-ahst.html (1967-1983)
AWT - (unknown)
BT - Baghdad Time (init)
CAT - Central Alaska Time
http://www.worldtimezone.com/wtz-names/wtz-cat.html (until 1967)
CVT - Christmas Islands Time (is CXT actually)
found references to Cape Verde Time but with different offset (-)
DNT - Dansk Normal Tid (init)
FST - French Summer Time (init)
FWT - French Winter Time (init)
GST - Guam Standard Time, Russia zone 9 (init)
HDT - Hawaii/Alaska Daylight-Saving Time (init)
http://www.worldtimezone.com/wtz-names/wtz-hdt.html (until 1947)
HMT - Hellas Mediterranean Time (?) (init)
IDLE - International Date Line, East (init)
IDLW - International Date Line, West (init)
IT - Iran Time (init)
JST - Japan Standard Time, Russia zone 8 (init)
JT - Java Time (init)
METDST - Middle Europe Daylight-Saving Time (init)
MEWT - Middle European Winter Time (init)
MT - Moluccas Time (init)
NOR - Norway Standard Time (init)
NT - Nome Time (init)
SST - Swedish Summer Time (init)
SWT - Swedish Winter Time (init)
THAT - found more references for TAHT
TRUK - found more references for TRUT
SET - Seychelles Time (init)
YDT - Yukon Daylight-Saving Time (init)
YST - Yukon Standard Time (init)
ZP4 - (init)
ZP5 - (init)
ZP6 - (init)

Does anybody vote against removing one of those time zones?

The patch also adds a system view pg_timezonenames that contains name, offset
and a boolean flag to indicate whether or not this is a daylight saving time

Review and comments welcome,


(sorry if this mail contains stupid line wrapping, I only have webmail
access right now)

Attachment Content-Type Size
timezoneFiles.diff text/x-patch 144.8 KB


Browse pgsql-hackers by date

  From Date Subject
Next Message Marc G. Fournier 2006-07-13 20:39:00 Re: monolithic distro (was: Re: Fwd: Three weeks left
Previous Message Rocco Altier 2006-07-13 20:29:11 Re: AIX buildfarm failure

Browse pgsql-patches by date

  From Date Subject
Next Message Simon Riggs 2006-07-13 20:59:38 Re: Resurrecting per-page cleaner for btree
Previous Message Magnus Hagander 2006-07-13 19:59:04 pg_regress in C