[tz] Extra transition for Europe/London with 2023d
Paul Eggert
eggert at cs.ucla.edu
Tue Jan 9 02:00:10 UTC 2024
On 1/7/24 18:08, Guy Harris wrote:
> tzname[] is still there, although they note that if another thread does
> tzset() or something that behaves as if tzset() were called, the
> behavior of accesses to tzname[] is undefined
There's another problem with tzname that I forgot to mention. If you run
localtime and it returns tm_isdt==0, then tzname[0] is well-defined but
tzname[1] is not. This is true even in single-threaded apps.
Similarly, tzname[0] is not well defined when localtime returns tm_isdst>0.
For example, suppose TZ="America/Los_Angeles", T is during December 1,
1945, and we run localtime(&T). tzname[0] must be "PST", but tzname[1]
might plausibly be "PPT" (the most recently-observed DST), and it might
plausibly be "PDT" (the nearest DST in the future). The TZif file
doesn't tell you which is correct.
In this particular case the .zi file "northamerica" suggests that "PPT"
is correct, but this detail is something I invented when I wrote that
part of the .zi file. It doesn't have anything to do with US or
California laws that I know about. This sort of invention is not
something that I worried about when I invented it, because it didn't
affect any info visible via the POSIX APIs, so I didn't bother to
comment this sort of thing when it occurs in the data, which it does
many times.
As I recall, tzcode doesn't update tzname[1] when tm_isdst==0, so
tzname[1] simply has whatever value it had before localtime was called.
Anyway, whatever value tzname[1] has, it's garbage if TZDB Zones are
being used. It's a misfeature of the POSIX API (or any other API) to
expose this information, because there is no "correct" value and nobody
really needs a "correct" value anyway.
More information about the tz
mailing list