[tz] Posix time zone question
zefram at fysh.org
Wed Jan 11 21:57:50 UTC 2012
Donald MacQueen wrote:
>1) What is the difference between America/Detroit and posix/America/Detroit?
They're the same thing, but you're not meant to use names starting
"posix/" as timezone names. The "posix/" prefix is concerned with two
different ways a time_t value can be interpreted for post-1972 times:
the posix/ files are for the standard way, where time_t encodes a UTC
timestamp, and the right/ files are for an alternative, where time_t
counts UTC seconds linearly. The two differ around leap seconds.
Short version: you want the posix/ files, don't touch right/ unless
you understood the above, and the timezone is named "America/Detroit"
and not "posix/America/Detroit".
>2) Where is the format of the tz source filesdescribed?
Not formally described anywhere. zic.c is canonical in interpreting it,
but it's not the easiest code to read.
>SAVE and Letter/S mean below?
SAVE says how far ahead of the zone's "standard" time clocks should be set
for the period covered by that rule. SAVE=1:00 is the usual DST value,
and SAVE=0:00 means DST is not in effect.
LETTER/S provides some letters that can be included in the zone
abbreviation specified by FORMAT. The US rules have letters "S" for
standard and "D" for DST, and America/Detroit specifies format "E%sT",
yielding abbreviations "EST" and "EDT". Many zones don't use this
facility, and put a complete abbreviation into FORMAT.
>I am also interested in what the Link format is.
A Link means that two zone names are synonymous. E.g., "Link
America/Denver America/Shiprock" defines America/Shiprock as an alias
for America/Denver; America/Denver is described elsewhere in the file.
>3) AIX machines use their own wacky format such at TZ=EST5EDT. Is there any
>decent mapping to real names?
"EST5EDT" is a POSIX standard format for $TZ, specifying standard and
DST offsets and abbreviations. It can (and should) have a further
clause added to specify a rule for transition dates, but it's only
a single rule for all years. Olson tzfiles (in version 2) actually
use this format internally, to specify how to handle dates beyond
the enumerated transitions; you can pull this data out with "tail -n1
/usr/share/zoneinfo/America/Detroit", for example.
In general a POSIX-format $TZ value cannot be converted to an Olson
zone name, because it's ambiguous. For example, "EST5EDT" (even
with the transition rule) is ambiguous between America/Detroit and
America/New_York, which behave differently in the past.
However, AIX is a little more complicated. For certain
specifically-recognised POSIX-format $TZ values, lacking explicit DST
transition rules, it knows the proper transition rule for some civil
timezone that has a nearly-matching offset and abbreviation. Actually
the abbreviations in the zone name often don't match the abbreviations
actually used in those civil timezones, and in some cases the offset
is wrong. I looked into this a few months ago, and came up with this
translation table, which I believe covers all the special AIX values:
AIX value means
The "CUT0" meaning is actually another POSIX $TZ value, not an Olson name,
and it refers to constant UT+0h, with no DST, and constant abbreviation
"CUT". In some cases the choice of Olson zone is a bit arbitrary, such
as for America/New_York. Not having an AIX system myself, I'm not clear
on whether AIX implements the historical progression of DST rules for each
zone, which would distinguish the ambiguous cases. I'm likewise not clear
whether, where the abbreviations are wrong, AIX uses the abbreviation
in the zone name (as POSIX requires) or uses the correct abbreviation.
I'd be interested to see the results of "zdump -v" on AIX for its special
zone names. Best mail me off-list if you acquire this output, because
it'll be a bit big.
I understand that recent AIX supports Olson zones, so you shouldn't need
to stick with "EST5EDT"-like names.
More information about the tz