Skip to content

Commit 8414dd6

Browse files
author
GitHub Actions
committed
Update zoneinfo to 2026a
1 parent 03e0287 commit 8414dd6

12 files changed

Lines changed: 225 additions & 69 deletions

File tree

tzdata/Makefile

Lines changed: 16 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -66,28 +66,6 @@ DATAFORM= main
6666

6767
LOCALTIME= Factory
6868

69-
# The POSIXRULES macro controls interpretation of POSIX-like TZ
70-
# settings like TZ='EET-2EEST' that lack DST transition rules.
71-
# If POSIXRULES is '-', no template is installed; this is the default.
72-
# Any other value for POSIXRULES is obsolete and should not be relied on, as:
73-
# * It does not work correctly in popular implementations such as GNU/Linux.
74-
# * It does not work even in tzcode, except for historical timestamps
75-
# that precede the last explicit transition in the POSIXRULES file.
76-
# Hence it typically does not work for current and future timestamps.
77-
# If, despite the above, you want a template for handling these settings,
78-
# you can change the line below (after finding the timezone you want in the
79-
# one of the $(TDATA) source files, or adding it to a source file).
80-
# Alternatively, if you discover you've got the wrong timezone, you can just
81-
# 'zic -p -' to remove it, or 'zic -p rightzone' to change it.
82-
# Use the command
83-
# make zonenames
84-
# to get a list of the values you can use for POSIXRULES.
85-
86-
POSIXRULES= -
87-
88-
# Also see TZDEFRULESTRING below, which takes effect only
89-
# if POSIXRULES is '-' or if the template file cannot be accessed.
90-
9169

9270
# Installation locations.
9371
#
@@ -170,7 +148,7 @@ TIME_T_ALTERNATIVES_TAIL = int_least32_t.ck uint_least32_t.ck \
170148
# applications that are not leap second aware, and is closer to unsmeared
171149
# "right" time than unsmeared POSIX time is (e.g., 0.5 vs 1.0 s max error).
172150

173-
REDO= posix_right
151+
REDO= posix_only
174152

175153
# Whether to put an "Expires" line in the leapseconds file.
176154
# Use EXPIRES_LINE=1 to put the line in, 0 to omit it.
@@ -284,7 +262,10 @@ LDLIBS=
284262
# -DHAVE_STRDUP=0 if your system lacks the strdup function
285263
# -DHAVE_STRNLEN=0 if your system lacks the strnlen function+
286264
# -DHAVE_STRTOLL=0 if your system lacks the strtoll function+
287-
# -DHAVE_STRUCT_STAT_ST_CTIM=0 if struct stat lacks a member st_ctim+
265+
# -DHAVE_STRUCT_STAT_ST_CTIM=0 if struct stat lacks a status-change member
266+
# of type struct timespec, so code should use st_ctime instead;
267+
# but if the status-change member name is st_ctimespec,
268+
# use -Dst_ctim=st_ctimespec instead (default is guessed)+
288269
# -DHAVE_STRUCT_TIMESPEC=0 if your system lacks struct timespec+
289270
# -DHAVE_SYMLINK=0 if your system lacks the symlink function
290271
# -DHAVE_SYS_STAT_H=0 if <sys/stat.h> does not work*
@@ -322,13 +303,13 @@ LDLIBS=
322303
# variable, 0 otherwise (default is guessed)
323304
# -DHAVE_SYS_SINGLE_THREADED_H=0 if <sys/single_threaded.h> works,
324305
# 0 otherwise (default is guessed)
325-
# -DTHREAD_RWLOCK to use read-write locks intead of mutexes.
326-
# This can improve paralellism and thus save real time
306+
# -DTHREAD_RWLOCK to use read-write locks instead of mutexes.
307+
# This can improve parallelism and thus save real time
327308
# if many threads call tzcode functions simultaneously.
328309
# It also costs CPU time and thus energy.
329310
# -DTHREAD_TM_MULTI to have gmtime, localtime, and offtime
330311
# return different struct tm * addresses in different threads.
331-
# This supports unportable programs that call
312+
# This supports nonportable programs that call
332313
# gmtime/localtime/offtime when they should call
333314
# gmtime_r/localtime_r/offtime_r to avoid races.
334315
# Because the corresponding storage is freed on thread exit,
@@ -347,10 +328,13 @@ LDLIBS=
347328
# -DTZ_DOMAIN=\"foo\" to use "foo" for gettext domain name; default is "tz"
348329
# -DTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
349330
# the default is system-supplied, typically "/usr/lib/locale"
331+
# -DTZ_RUNTIME_LEAPS=0 to disable runtime support for leap seconds.
332+
# This conforms to POSIX, shrinks tzcode's attack surface,
333+
# and is more efficient. However, it fails to support Internet
334+
# RFC 9636's leap seconds.
350335
# -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
351-
# DST transitions for proleptic format TZ strings lacking them,
352-
# in the usual case where POSIXRULES is '-'. If not specified,
353-
# TZDEFRULESTRING defaults to US rules for future DST transitions.
336+
# DST transitions for proleptic format TZ strings lacking them.
337+
# If not specified, it defaults to US rules for future DST transitions.
354338
# This mishandles some past timestamps, as US DST rules have changed.
355339
# It also mishandles settings like TZ='EET-2EEST' for eastern Europe,
356340
# as Europe and US DST rules differ.
@@ -400,12 +384,13 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 \
400384
-Wold-style-definition -Woverlength-strings -Wpointer-arith \
401385
-Wshadow -Wshift-overflow=2 -Wstrict-overflow \
402386
-Wstrict-prototypes -Wstringop-overflow=4 \
403-
-Wstringop-truncation -Wsuggest-attribute=cold \
387+
-Wsuggest-attribute=cold \
404388
-Wsuggest-attribute=const -Wsuggest-attribute=format \
405389
-Wsuggest-attribute=malloc \
406390
-Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \
407391
-Wtrampolines -Wundef -Wunused-macros -Wuse-after-free=3 \
408392
-Wvariadic-macros -Wvla -Wwrite-strings \
393+
-Wzero-as-null-pointer-constant \
409394
-Wno-format-nonliteral -Wno-sign-compare -Wno-type-limits
410395
#
411396
# If your system has a "GMT offset" field in its "struct tm"s
@@ -723,7 +708,6 @@ install: all $(DATA) $(REDO) $(MANS)
723708
'$(DESTDIR)$(MANDIR)/man3' '$(DESTDIR)$(MANDIR)/man5' \
724709
'$(DESTDIR)$(MANDIR)/man8'
725710
$(ZIC_INSTALL) -l $(LOCALTIME) \
726-
-p $(POSIXRULES) \
727711
-t '$(DESTDIR)$(TZDEFAULT)'
728712
cp -f $(TABDATA) '$(DESTDIR)$(TZDIR)/.'
729713
cp tzselect '$(DESTDIR)$(BINDIR)/.'

tzdata/NEWS

Lines changed: 98 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,100 @@
11
News for the tz database
22

3+
Release 2026a - 2026-03-01 22:59:49 -0800
4+
5+
Briefly:
6+
Moldova has used EU transition times since 2022.
7+
The "right" TZif files are no longer installed by default.
8+
-DTZ_RUNTIME_LEAPS=0 disables runtime support for leap seconds.
9+
TZif files are no longer limited to 50 bytes of abbreviations.
10+
zic is no longer limited to 50 leap seconds.
11+
Several integer overflow bugs have been fixed.
12+
13+
Changes to past and future timestamps
14+
15+
Since 2022 Moldova has observed EU transition times, that is, it
16+
has sprung forward at 03:00, not 02:00, and has fallen back at
17+
04:00, not 03:00. (Thanks to Heitor David Pinto.)
18+
19+
Changes to data
20+
21+
Remove Europe/Chisinau from zonenow.tab, as it now agrees with
22+
Europe/Athens for future timestamps.
23+
24+
Changes to build procedure
25+
26+
The Makefile no longer by default installs an alternate set
27+
of TZif files for system clocks that count leap seconds.
28+
Install with 'make REDO=posix_right' to get the old default,
29+
which is rarely used in major downstream distributions.
30+
If your system clock counts leap seconds (contrary to POSIX),
31+
it is better to install with 'make REDO=right_only'.
32+
This change does not affect the leapseconds file, which is still
33+
installed as before.
34+
35+
The Makefile's POSIXRULES option, which was declared obsolete in
36+
release 2019b, has been removed. The Makefile's build procedure
37+
thus no longer optionally installs the obsolete posixrules file.
38+
39+
Changes to code
40+
41+
Compiling with the new option -DTZ_RUNTIME_LEAPS=0 disables
42+
runtime support for leap seconds. Although this conforms to
43+
POSIX, shrinks tzcode's attack surface, and is more efficient,
44+
it fails to support Internet RFC 9636's leap seconds.
45+
46+
zic now can generate, and localtime.c can now use, TZif files that
47+
hold up to 256 bytes of abbreviations, counting trailing NULs.
48+
The previous limit was 50 bytes, and some tzdata TZif files were
49+
already consuming 40 bytes. zic -v warns if it generates a file
50+
that exceeds the old 50-byte limit.
51+
52+
zic -L can now generate TZif files with more than 50 leap seconds.
53+
This helps test TZif readers not limited to 50 leap seconds, as
54+
tzcode's localtime.c is; it has little immediate need for
55+
practical timekeeping as there have been only 27 leap seconds and
56+
possibly there will be no more, due to planned changes to UTC.
57+
zic -v warns if its output exceeds the old 50-second limit.
58+
59+
localtime.c no longer accesses the posixrules file generated by
60+
zic -p. Hence for obsolete and nonconforming settings like
61+
TZ="AST4ADT" it now typically falls back on US DST rules, rather
62+
than attempting to override this fallback with the contents of the
63+
posixrules file. This removes library support that was declared
64+
obsolete in release 2019b, and fixes some undefined behavior.
65+
(Undefined behavior reported by GitHub user Naveed8951.)
66+
67+
The posix2time, posix2time_z, time2posix, and time2posix_z
68+
functions now set errno=EOVERFLOW and return ((time_t) -1) if the
69+
result is not representable. Formerly they had undefined behavior
70+
that could in practice result in crashing, looping indefinitely,
71+
or returning an incorrect result. As before, these functions are
72+
defined only when localtime.c is compiled with the -DSTD_INSPIRED
73+
option.
74+
75+
Some other undefined behavior, triggered by TZif files containing
76+
outlandish but conforming UT offsets or leap second corrections,
77+
has also been fixed. (Some of these bugs reported by Naveed8951.)
78+
79+
localtime.c no longer rejects TZif files that exactly fit in its
80+
internal structures, fixing off-by-one typos introduced in 2014g.
81+
82+
zic no longer generates a no-op transition when
83+
simultaneous Rule and Zone changes cancel each other out.
84+
This occurs in tzdata only in Asia/Tbilisi on 1997-03-30.
85+
(Thanks to Renchunhui for a test case showing the bug.)
86+
87+
zic no longer assumes you can fflush a read-only stream.
88+
(Problem reported by Christos Zoulas.)
89+
90+
zic no longer generates UT offsets equal to -2**31 and localtime.c
91+
no longer accepts them, as they can cause trouble in both
92+
localtime.c and its callers. RFC 9636 prohibits such offsets.
93+
94+
zic -p now warns that the -p option is obsolete and likely
95+
ineffective.
96+
97+
398
Release 2025c - 2025-12-10 14:42:37 -0800
499

5100
Briefly:
@@ -69,6 +164,8 @@ Release 2025c - 2025-12-10 14:42:37 -0800
69164
The new CFLAGS options -DHAVE_STRUCT_STAT_ST_CTIM=0 and
70165
-DHAVE_STRUCT_TIMESPEC=0 port to non-POSIX.1-2008 platforms
71166
that lack st_ctim and struct timespec, respectively.
167+
On these platforms, the code falls back on st_ctime to
168+
implement -DTZ_CHANGE_INTERVAL=N.
72169

73170
tzset etc. now treat ' ' like '_' in time zone abbreviations,
74171
just as they treat other invalid bytes. This continues the
@@ -89,7 +186,7 @@ Release 2025c - 2025-12-10 14:42:37 -0800
89186

90187
The new CFLAGS option -TTHREAD_TM_MULTI causes localtime to return
91188
a pointer to thread-specific memory, as FreeBSD does, instead of
92-
to the same memory in all threads. This supports unportable
189+
to the same memory in all threads. This supports nonportable
93190
programs that incorrectly use localtime instead of localtime_r.
94191
This option affects gmtime and offtime similarly to localtime.
95192
Because the corresponding storage is freed on thread exit, this

tzdata/backzone

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1757,13 +1757,12 @@ Zone Pacific/Majuro 11:24:48 - LMT 1901
17571757
# Midway
17581758
#
17591759
# From Mark Brader (2005-01-23):
1760-
# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
1761-
# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
1760+
# [<https://www.timetableimages.com/ttimages/pa/pa36/pa36.pdf>]
17621761
# reproduced a Pan American Airways timetable from 1936, for their weekly
17631762
# "Orient Express" flights between San Francisco and Manila, and connecting
17641763
# flights to Chicago and the US East Coast. As it uses some time zone
17651764
# designations that I've never seen before:....
1766-
# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I. H.L.T. Ar. 5:30P Sun.
1765+
# Fri. 6:30A Lv. HONOLULU (Pearl Harbor), H.I. . H.L.T. Ar. 5:30P Sun.
17671766
# " 3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A "
17681767
#
17691768
Zone Pacific/Midway -11:49:28 - LMT 1901

tzdata/etcetera

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
# which load the "UTC" file to handle seconds properly.
2121
Zone Etc/UTC 0 - UTC
2222

23-
# Functions like gmtime load the "GMT" file to handle leap seconds properly.
23+
# If leap second support is enabled, functions like gmtime
24+
# load the "GMT" file to handle leap seconds properly.
2425
# Vanguard section, which works with most .zi parsers.
2526
#Zone GMT 0 - GMT
2627
# Rearguard section, for TZUpdater 2.3.2 and earlier.

tzdata/europe

Lines changed: 68 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1041,9 +1041,19 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
10411041

10421042
# Greenland
10431043
#
1044-
# From Paul Eggert (2004-10-31):
1044+
# From Paul Eggert (2026-01-22):
1045+
# During World War II, Greenland was effectively independent of Denmark and
1046+
# observed daylight saving time. TIME, volume 37, page 23 (1941-04-21)
1047+
# <https://time.com/archive/6770243/war-peace-greenlands-icy-mountains/> says,
1048+
# "Penfield and West made their way to the U.S.'s most northerly consulate.
1049+
# They were astonished to find that Greenlanders, with almost 24 hours of
1050+
# sunlight a day during the summer, have daylight saving time."
1051+
# As the details are unknown they are omitted from the data for now.
1052+
#
10451053
# During World War II, Germany maintained secret manned weather stations in
10461054
# East Greenland and Franz Josef Land, but we don't know their time zones.
1055+
# Also, they're likely out of scope for the database
1056+
# as we lack resources to track every bit of military activity.
10471057
# My source for this is Wilhelm Dege's book mentioned under Svalbard.
10481058
#
10491059
# From Paul Eggert (2017-12-10):
@@ -1957,7 +1967,6 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
19571967

19581968
# From Stepan Golosunov (2016-03-07):
19591969
# the act of the government of the Republic of Moldova Nr. 132 from 1990-05-04
1960-
# http://lex.justice.md/viewdoc.php?action=view&view=doc&id=298782&lang=2
19611970
# ... says that since 1990-05-06 on the territory of the Moldavian SSR
19621971
# time would be calculated as the standard time of the second time belt
19631972
# plus one hour of the "summer" time. To implement that clocks would be
@@ -2012,9 +2021,61 @@ Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 # Valletta
20122021
# says the 2014-03-30 spring-forward transition was at 02:00 local time.
20132022
# Guess that since 1997 Moldova has switched one hour before the EU.
20142023

2024+
# From Heitor David Pinto (2026-02-22):
2025+
# Soviet Moldovan resolution 132 of 1990 defined the summer time period from
2026+
# the last Sunday in March at 2:00 to the last Sunday in September at 3:00,
2027+
# matching the dates used in most of Europe at the time:
2028+
# https://web.archive.org/web/20211107050832/http://lex.justice.md/viewdoc.php?action=view&view=doc&id=298782&lang=1
2029+
#
2030+
# It seems that in 1996 Moldova changed the end date to October like most of
2031+
# Europe, but kept the transitions at 2:00 and 3:00 rather than 1:00 UTC,
2032+
# which would have been locally 3:00 and 4:00....
2033+
#
2034+
# The notices in the Moldovan government website and broadcaster showed the
2035+
# transitions at 2:00 and 3:00 until 2021:
2036+
# 2015 https://old.gov.md/en/node/7304
2037+
# 2016 https://old.gov.md/en/node/12587
2038+
# 2017 https://old.gov.md/en/node/20654
2039+
# 2017 https://old.gov.md/en/content/moldova-upholds-winter-time-night-28-29-october
2040+
# 2018 https://old.gov.md/en/content/moldova-switch-summer-time
2041+
# 2018 https://old.gov.md/en/content/cabinet-ministers-informs-about-switch-winter-time-28-october
2042+
# 2019 https://old.gov.md/en/content/moldova-switch-summer-time-31-march
2043+
# 2019 https://old.gov.md/en/node/31122
2044+
# 2020 https://old.gov.md/en/node/32771
2045+
# 2020 https://old.gov.md/en/node/34497
2046+
# 2021 https://trm.md/ro/social/moldova-trece-in-aceasta-noapte-la-ora-de-vara
2047+
# 2021 https://trm.md/en/social/republica-moldova-trece-la-ora-de-iarna1
2048+
#
2049+
# However, since 2022, the notices showed the transitions at 3:00 and 4:00,
2050+
# matching the EU rule at 1:00 UTC:
2051+
# 2022 https://trm.md/en/social/in-acest-weekend-republica-moldova-trece-la-ora-de-vara
2052+
# 2022 https://old.gov.md/en/content/moldova-switch-winter-time
2053+
# 2023 https://moldova1.md/p/6587/ora-de-vara-2023-cum-schimbam-acele-ceasornicelor-si-cand-trecem-la-ora-de-vara
2054+
# 2023 https://old.gov.md/en/node/46662
2055+
# 2024 https://moldova1.md/p/26535/republica-moldova-trece-la-ora-de-vara-in-acest-weekend
2056+
# 2024 https://moldova1.md/p/37768/republica-moldova-trece-in-aceasta-noapte-la-ora-de-iarna
2057+
# 2025 https://moldova1.md/p/46349/republica-moldova-trece-la-ora-de-vara-pe-30-martie-cum-ne-afecteaza-si-ce-recomanda-medicii
2058+
# 2025 https://moldova1.md/p/60469/republica-moldova-trece-la-ora-de-iarna-ceasurile-se-dau-inapoi-cu-o-ora
2059+
#
2060+
# It seems that the changes to the end date and transition times were just
2061+
# done in practice without formally changing the resolution. In late 2025, the
2062+
# government said that the Soviet resolution was still in force, and proposed
2063+
# a new resolution to replace it and formally establish the EU rule:
2064+
# ... based on the notices, it seems that in practice Moldova already
2065+
# uses the EU rule since 2022. This was also the year when Moldova applied to
2066+
# join the EU.
2067+
#
2068+
# From Robert Bastian (2026-02-26):
2069+
# This has been approved and published in the government gazette:
2070+
# https://monitorul.gov.md/ro/monitorul/view/pdf/3234/part/2#page=27
2071+
#
2072+
# From Paul Eggert (2026-02-24):
2073+
# Also see Svetlana Rudenko, "Moldova abandons the 'Soviet era'", Logos Press,
2074+
# 2026-02-21 <https://logos-pres.md/en/news/moldova-abandons-the-soviet-era/>.
2075+
20152076
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S
2016-
Rule Moldova 1997 max - Mar lastSun 2:00 1:00 S
2017-
Rule Moldova 1997 max - Oct lastSun 3:00 0 -
2077+
Rule Moldova 1997 2021 - Mar lastSun 2:00 1:00 S
2078+
Rule Moldova 1997 2021 - Oct lastSun 3:00 0 -
20182079

20192080
# Zone NAME STDOFF RULES FORMAT [UNTIL]
20202081
Zone Europe/Chisinau 1:55:20 - LMT 1880
@@ -2027,7 +2088,8 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
20272088
2:00 Russia EE%sT 1992
20282089
2:00 E-Eur EE%sT 1997
20292090
# See Romania commentary for the guessed 1997 transition to EU rules.
2030-
2:00 Moldova EE%sT
2091+
2:00 Moldova EE%sT 2022
2092+
2:00 EU EE%sT
20312093

20322094
# Poland
20332095

@@ -2413,7 +2475,7 @@ Zone Atlantic/Madeira -1:07:36 - LMT 1884 # Funchal
24132475
# Nine O'clock <http://www.nineoclock.ro/POL/1778pol.html>
24142476
# (1998-10-23) reports that the switch occurred at
24152477
# 04:00 local time in fall 1998. For lack of better info,
2416-
# assume that Romania and Moldova switched to EU rules in 1997,
2478+
# assume that Romania switched to EU rules in 1997,
24172479
# the same year as Bulgaria.
24182480
#
24192481
# Rule NAME FROM TO - IN ON AT SAVE LETTER/S

tzdata/leap-seconds.list

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,15 @@
6060
#
6161
# The following line shows the last update of this file in NTP timestamp:
6262
#
63-
#$ 3960835200
63+
#$ 3976686858
6464
#
6565
# 2) Expiration date of the file given on a semi-annual basis: last June or last December
6666
#
67-
# File expires on 28 June 2026
67+
# File expires on 28 December 2026
6868
#
6969
# Expire date in NTP timestamp:
7070
#
71-
#@ 3991593600
71+
#@ 4007404800
7272
#
7373
#
7474
# LIST OF LEAP SECONDS
@@ -117,4 +117,4 @@
117117
# please see the readme file in the 'source' directory :
118118
# https://hpiers.obspm.fr/iers/bul/bulc/ntp/sources/README
119119
#
120-
#h 49db2447 571e5e1b 2f002a53 9c8da8e4 39b8e49e
120+
#h 2e101270 4e6749f8 2f1792b7 14a0c188 36bb19d6

0 commit comments

Comments
 (0)