o Kazakhstan unifies on UTC+5 beginning 2024-03-01.
o Palestine springs forward a week later after Ramadan.
-# $OpenBSD: africa,v 1.74 2024/01/02 22:43:20 millert Exp $
+# $OpenBSD: africa,v 1.75 2024/02/05 17:07:23 millert Exp $
# tzdb data for Africa and environs
# This file is in the public domain, so clarified as of
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
# https://www.jstor.org/stable/1774359
#
+# For the 1911/1912 establishment of standard time in French possessions, see:
+# Société Française de Physique, Recueil de constantes physiques (1913),
+# page 752, 18b.
+#
# European-style abbreviations are commonly used along the Mediterranean.
# For sub-Saharan Africa abbreviations were less standardized.
# Previous editions of this database used WAT, CAT, SAT, and EAT
# Chad
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone Africa/Ndjamena 1:00:12 - LMT 1912 # N'Djamena
+Zone Africa/Ndjamena 1:00:12 - LMT 1912 Jan 1 # N'Djamena
1:00 - WAT 1979 Oct 14
1:00 1:00 WAST 1980 Mar 8
1:00 - WAT
# Inaccessible, Nightingale: uninhabited
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone Africa/Abidjan -0:16:08 - LMT 1912
+Zone Africa/Abidjan -0:16:08 - LMT 1912 Jan 1
0:00 - GMT
# Djibouti
-# $OpenBSD: asia,v 1.108 2024/01/02 22:43:20 millert Exp $
+# $OpenBSD: asia,v 1.109 2024/02/05 17:07:23 millert Exp $
# tzdb data for Asia and environs
# This file is in the public domain, so clarified as of
# effective December 21st, 2018....
# http://adilet.zan.kz/rus/docs/P1800000817 (russian language).
+# From Zhanbolat Raimbekov (2024-01-19):
+# Kazakhstan (all parts) switching to UTC+5 on March 1, 2024
+# https://www.gov.kz/memleket/entities/mti/press/news/details/688998?lang=ru
+# [in Russian]
+# (2024-01-20): https://primeminister.kz/ru/decisions/19012024-20
+#
+# From Alexander Krivenyshev (2024-01-19):
+# According to a different news and the official web site for the Ministry of
+# Trade and Integration of the Republic of Kazakhstan:
+# https://en.inform.kz/news/kazakhstan-to-switch-to-single-hour-zone-mar-1-54ad0b/
+
# Zone NAME STDOFF RULES FORMAT [UNTIL]
#
# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
-# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA,
-# KZ-KAR, KZ-SEV, KZ-PAV, and KZ-YUZ.
+# This includes Abai/Abay (ISO 3166-2 code KZ-10), Aqmola/Akmola (KZ-11),
+# Almaty (KZ-19), Almaty city (KZ-75), Astana city (KZ-71),
+# East Kazkhstan (KZ-63), Jambyl/Zhambyl (KZ-31), Jetisu/Zhetysu (KZ-33),
+# Karaganda (KZ-35), North Kazakhstan (KZ-59), Pavlodar (KZ-55),
+# Shyumkent city (KZ-79), Turkistan (KZ-61), and Ulytau (KZ-62).
Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
5:00 - +05 1930 Jun 21
6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
- 6:00 - +06
-# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
+ 6:00 - +06 2024 Mar 1 0:00
+ 5:00 - +05
+# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-43)
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
5:00 - +05 1981 Apr 1
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
6:00 - +06 2018 Dec 21 0:00
5:00 - +05
-#
-# Qostanay (aka Kostanay, Kustanay) (KZ-KUS)
+# Qostanay (aka Kostanay, Kustanay) (KZ-39)
# The 1991/2 rules are unclear partly because of the 1997 Turgai
# reorganization.
Zone Asia/Qostanay 4:14:28 - LMT 1924 May 2
5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
- 6:00 - +06
-
-# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
+ 6:00 - +06 2024 Mar 1 0:00
+ 5:00 - +05
+# Aqtöbe (aka Aktobe, formerly Aktyubinsk) (KZ-15)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
4:00 - +04 1930 Jun 21
5:00 - +05 1981 Apr 1
4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
5:00 - +05
-# Mangghystaū (KZ-MAN)
+# Mangghystaū (KZ-47)
# Aqtau was not founded until 1963, but it represents an inhabited region,
# so include timestamps before 1963.
Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s
4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
5:00 - +05
-# Atyraū (KZ-ATY) is like Mangghystaū except it switched from
+# Atyraū (KZ-23) is like Mangghystaū except it switched from
# +04/+05 to +05/+06 in spring 1999, not fall 1994.
Zone Asia/Atyrau 3:27:44 - LMT 1924 May 2
3:00 - +03 1930 Jun 21
5:00 RussiaAsia +05/+06 1999 Mar 28 2:00s
4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
5:00 - +05
-# West Kazakhstan (KZ-ZAP)
+# West Kazakhstan (KZ-27)
# From Paul Eggert (2016-03-18):
# The 1989 transition is from USSR act No. 227 (1989-03-14).
Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
# ... winter time will begin in Palestine from Saturday 10-28-2023,
# 02:00 AM by 60 minutes back.
#
-# From Paul Eggert (2023-03-22):
+# From Heba Hamad (2024-01-25):
+# the summer time for the years 2024,2025 will begin in Palestine
+# from Saturday at 02:00 AM by 60 minutes forward as shown below:
+# year date
+# 2024 2024-04-20
+# 2025 2025-04-12
+#
+# From Paul Eggert (2024-01-25):
# For now, guess that spring and fall transitions will normally
# continue to use 2022's rules, that during DST Palestine will switch
# to standard time at 02:00 the last Saturday before Ramadan and back
-# to DST at 02:00 the first Saturday after Ramadan, and that
+# to DST at 02:00 the second Saturday after Ramadan, and that
# if the normal spring-forward or fall-back transition occurs during
# Ramadan the former is delayed and the latter advanced.
# To implement this, I predicted Ramadan-oriented transition dates for
-# 2023 through 2086 by running the following program under GNU Emacs 28.2,
+# 2026 through 2086 by running the following program under GNU Emacs 29.2,
# with the results integrated by hand into the table below.
# Predictions after 2086 are approximated without Ramadan.
#
-# (let ((islamic-year 1444))
+# (let ((islamic-year 1447))
# (require 'cal-islam)
# (while (< islamic-year 1510)
# (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year)))
# (while (/= saturday (mod (setq a (1- a)) 7)))
# (while (/= saturday (mod b 7))
# (setq b (1+ b)))
+# (setq b (+ 7 b))
# (setq a (calendar-gregorian-from-absolute a))
# (setq b (calendar-gregorian-from-absolute b))
# (insert
Rule Palestine 2022 only - Mar 27 0:00 1:00 S
Rule Palestine 2022 2035 - Oct Sat<=30 2:00 0 -
Rule Palestine 2023 only - Apr 29 2:00 1:00 S
-Rule Palestine 2024 only - Apr 13 2:00 1:00 S
-Rule Palestine 2025 only - Apr 5 2:00 1:00 S
+Rule Palestine 2024 only - Apr 20 2:00 1:00 S
+Rule Palestine 2025 only - Apr 12 2:00 1:00 S
Rule Palestine 2026 2054 - Mar Sat<=30 2:00 1:00 S
Rule Palestine 2036 only - Oct 18 2:00 0 -
Rule Palestine 2037 only - Oct 10 2:00 0 -
Rule Palestine 2038 only - Sep 25 2:00 0 -
Rule Palestine 2039 only - Sep 17 2:00 0 -
-Rule Palestine 2039 only - Oct 22 2:00 1:00 S
-Rule Palestine 2039 2067 - Oct Sat<=30 2:00 0 -
Rule Palestine 2040 only - Sep 1 2:00 0 -
-Rule Palestine 2040 only - Oct 13 2:00 1:00 S
+Rule Palestine 2040 only - Oct 20 2:00 1:00 S
+Rule Palestine 2040 2067 - Oct Sat<=30 2:00 0 -
Rule Palestine 2041 only - Aug 24 2:00 0 -
-Rule Palestine 2041 only - Sep 28 2:00 1:00 S
+Rule Palestine 2041 only - Oct 5 2:00 1:00 S
Rule Palestine 2042 only - Aug 16 2:00 0 -
-Rule Palestine 2042 only - Sep 20 2:00 1:00 S
+Rule Palestine 2042 only - Sep 27 2:00 1:00 S
Rule Palestine 2043 only - Aug 1 2:00 0 -
-Rule Palestine 2043 only - Sep 12 2:00 1:00 S
+Rule Palestine 2043 only - Sep 19 2:00 1:00 S
Rule Palestine 2044 only - Jul 23 2:00 0 -
-Rule Palestine 2044 only - Aug 27 2:00 1:00 S
+Rule Palestine 2044 only - Sep 3 2:00 1:00 S
Rule Palestine 2045 only - Jul 15 2:00 0 -
-Rule Palestine 2045 only - Aug 19 2:00 1:00 S
+Rule Palestine 2045 only - Aug 26 2:00 1:00 S
Rule Palestine 2046 only - Jun 30 2:00 0 -
-Rule Palestine 2046 only - Aug 11 2:00 1:00 S
+Rule Palestine 2046 only - Aug 18 2:00 1:00 S
Rule Palestine 2047 only - Jun 22 2:00 0 -
-Rule Palestine 2047 only - Jul 27 2:00 1:00 S
+Rule Palestine 2047 only - Aug 3 2:00 1:00 S
Rule Palestine 2048 only - Jun 6 2:00 0 -
-Rule Palestine 2048 only - Jul 18 2:00 1:00 S
+Rule Palestine 2048 only - Jul 25 2:00 1:00 S
Rule Palestine 2049 only - May 29 2:00 0 -
-Rule Palestine 2049 only - Jul 3 2:00 1:00 S
+Rule Palestine 2049 only - Jul 10 2:00 1:00 S
Rule Palestine 2050 only - May 21 2:00 0 -
-Rule Palestine 2050 only - Jun 25 2:00 1:00 S
+Rule Palestine 2050 only - Jul 2 2:00 1:00 S
Rule Palestine 2051 only - May 6 2:00 0 -
-Rule Palestine 2051 only - Jun 17 2:00 1:00 S
+Rule Palestine 2051 only - Jun 24 2:00 1:00 S
Rule Palestine 2052 only - Apr 27 2:00 0 -
-Rule Palestine 2052 only - Jun 1 2:00 1:00 S
+Rule Palestine 2052 only - Jun 8 2:00 1:00 S
Rule Palestine 2053 only - Apr 12 2:00 0 -
-Rule Palestine 2053 only - May 24 2:00 1:00 S
+Rule Palestine 2053 only - May 31 2:00 1:00 S
Rule Palestine 2054 only - Apr 4 2:00 0 -
-Rule Palestine 2054 only - May 16 2:00 1:00 S
-Rule Palestine 2055 only - May 1 2:00 1:00 S
-Rule Palestine 2056 only - Apr 22 2:00 1:00 S
-Rule Palestine 2057 only - Apr 7 2:00 1:00 S
-Rule Palestine 2058 max - Mar Sat<=30 2:00 1:00 S
+Rule Palestine 2054 only - May 23 2:00 1:00 S
+Rule Palestine 2055 only - May 8 2:00 1:00 S
+Rule Palestine 2056 only - Apr 29 2:00 1:00 S
+Rule Palestine 2057 only - Apr 14 2:00 1:00 S
+Rule Palestine 2058 only - Apr 6 2:00 1:00 S
+Rule Palestine 2059 max - Mar Sat<=30 2:00 1:00 S
Rule Palestine 2068 only - Oct 20 2:00 0 -
Rule Palestine 2069 only - Oct 12 2:00 0 -
Rule Palestine 2070 only - Oct 4 2:00 0 -
Rule Palestine 2071 only - Sep 19 2:00 0 -
Rule Palestine 2072 only - Sep 10 2:00 0 -
-Rule Palestine 2072 only - Oct 15 2:00 1:00 S
+Rule Palestine 2072 only - Oct 22 2:00 1:00 S
Rule Palestine 2072 max - Oct Sat<=30 2:00 0 -
Rule Palestine 2073 only - Sep 2 2:00 0 -
-Rule Palestine 2073 only - Oct 7 2:00 1:00 S
+Rule Palestine 2073 only - Oct 14 2:00 1:00 S
Rule Palestine 2074 only - Aug 18 2:00 0 -
-Rule Palestine 2074 only - Sep 29 2:00 1:00 S
+Rule Palestine 2074 only - Oct 6 2:00 1:00 S
Rule Palestine 2075 only - Aug 10 2:00 0 -
-Rule Palestine 2075 only - Sep 14 2:00 1:00 S
+Rule Palestine 2075 only - Sep 21 2:00 1:00 S
Rule Palestine 2076 only - Jul 25 2:00 0 -
-Rule Palestine 2076 only - Sep 5 2:00 1:00 S
+Rule Palestine 2076 only - Sep 12 2:00 1:00 S
Rule Palestine 2077 only - Jul 17 2:00 0 -
-Rule Palestine 2077 only - Aug 28 2:00 1:00 S
+Rule Palestine 2077 only - Sep 4 2:00 1:00 S
Rule Palestine 2078 only - Jul 9 2:00 0 -
-Rule Palestine 2078 only - Aug 13 2:00 1:00 S
+Rule Palestine 2078 only - Aug 20 2:00 1:00 S
Rule Palestine 2079 only - Jun 24 2:00 0 -
-Rule Palestine 2079 only - Aug 5 2:00 1:00 S
+Rule Palestine 2079 only - Aug 12 2:00 1:00 S
Rule Palestine 2080 only - Jun 15 2:00 0 -
-Rule Palestine 2080 only - Jul 20 2:00 1:00 S
+Rule Palestine 2080 only - Jul 27 2:00 1:00 S
Rule Palestine 2081 only - Jun 7 2:00 0 -
-Rule Palestine 2081 only - Jul 12 2:00 1:00 S
+Rule Palestine 2081 only - Jul 19 2:00 1:00 S
Rule Palestine 2082 only - May 23 2:00 0 -
-Rule Palestine 2082 only - Jul 4 2:00 1:00 S
+Rule Palestine 2082 only - Jul 11 2:00 1:00 S
Rule Palestine 2083 only - May 15 2:00 0 -
-Rule Palestine 2083 only - Jun 19 2:00 1:00 S
+Rule Palestine 2083 only - Jun 26 2:00 1:00 S
Rule Palestine 2084 only - Apr 29 2:00 0 -
-Rule Palestine 2084 only - Jun 10 2:00 1:00 S
+Rule Palestine 2084 only - Jun 17 2:00 1:00 S
Rule Palestine 2085 only - Apr 21 2:00 0 -
-Rule Palestine 2085 only - Jun 2 2:00 1:00 S
+Rule Palestine 2085 only - Jun 9 2:00 1:00 S
Rule Palestine 2086 only - Apr 13 2:00 0 -
-Rule Palestine 2086 only - May 18 2:00 1:00 S
+Rule Palestine 2086 only - May 25 2:00 1:00 S
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
# Philippines
-# From Paul Eggert (2018-11-18):
+# From Paul Eggert (2024-01-21):
# The Spanish initially used American (west-of-Greenwich) time.
# It is unknown what time Manila kept when the British occupied it from
# 1762-10-06 through 1764-04; for now assume it kept American time.
# Philippines, issued a proclamation announcing that 1844-12-30 was to
# be immediately followed by 1845-01-01; see R.H. van Gent's
# History of the International Date Line
-# https://www.staff.science.uu.nl/~gent0113/idl/idl_philippines.htm
+# https://webspace.science.uu.nl/~gent0113/idl/idl_philippines.htm
# The rest of the data entries are from Shanks & Pottenger.
# From Jesper Nørgaard Welen (2006-04-26):
# The English-language name of Vietnam's most populous city is "Ho Chi Minh
# City"; use Ho_Chi_Minh below to avoid a name of more than 14 characters.
-# From Paul Eggert (2022-07-27) after a 2014 heads-up from Trần Ngọc Quân:
+# From Paul Eggert (2024-01-14) after a 2014 heads-up from Trần Ngọc Quân
+# and a 2024-01-14 heads-up from Đoàn Trần Công Danh:
# Trần Tiến Bình's authoritative book "Lịch Việt Nam: thế kỷ XX-XXI (1901-2100)"
# (Nhà xuất bản Văn Hoá - Thông Tin, Hanoi, 2005), pp 49-50,
# is quoted verbatim in:
#
# Trần cites the following sources; it's unclear which supplied the info above.
#
-# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội,
-# No. 9, Paris, February 1982.
+# Hoàng Xuân Hãn: "Lịch và lịch Việt Nam". Tập san Khoa học Xã hội,
+# No. 9, Paris, February 1982.
+#
+# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)",
+# NXB Thống kê, Hanoi, 2000.
+#
+# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
+# NXB Thuận Hoá, Huế, 1995.
#
-# Lê Thành Lân: "Lịch và niên biểu lịch sử hai mươi thế kỷ (0001-2010)",
-# NXB Thống kê, Hanoi, 2000.
+# Here is the decision for the September 1945 transition:
+# Võ Nguyên Giáp, Việt Nam Dân Quốc Công Báo, No. 1 (1945-09-29), page 13
+# http://baochi.nlv.gov.vn/baochi/cgi-bin/baochi?a=d&d=JwvzO19450929.2.5&dliv=none
+# It says that on 1945-09-01 at 24:00, Vietnam moved back two hours, to +07.
+# It also mentions a 1945-03-29 decree (by a Japanese Goveror-General)
+# to set the time zone to +09, but does not say whether that decree
+# merely legalized an earlier change to +09.
#
-# Lê Thành Lân: "Lịch hai thế kỷ (1802-2010) và các lịch vĩnh cửu",
-# NXB Thuận Hoá, Huế, 1995.
+# July 1955 transition:
+# Ngô Đình Diệm, Công Báo Việt Nam, No. 92 (1955-07-02), page 1780-1781
+# Ordinance (Dụ) No. 46 (1955-06-25)
+# http://ddsnext.crl.edu/titles/32341#?c=0&m=29&s=0&cv=4&r=0&xywh=-89%2C342%2C1724%2C1216
+# It says that on 1955-07-01 at 01:00, South Vietnam moved back 1 hour (to +07).
+#
+# December 1959 transition:
+# Ngô Đình Diệm, Công Báo Việt Nam Cộng Hòa, 1960 part 1 (1960-01-02), page 62
+# Decree (Sắc lệnh) No. 362-TTP (1959-12-30)
+# http://ddsnext.crl.edu/titles/32341#?c=0&m=138&s=0&cv=793&r=0&xywh=-54%2C1504%2C1705%2C1202
+# It says that on 1959-12-31 at 23:00, South Vietnam moved forward 1 hour (to +08).
+
# Zone NAME STDOFF RULES FORMAT [UNTIL]
#STDOFF 7:06:30.13
7:06:30 - PLMT 1911 May 1 # Phù Liễn MT
7:00 - +07 1942 Dec 31 23:00
8:00 - +08 1945 Mar 14 23:00
- 9:00 - +09 1945 Sep 2
+ 9:00 - +09 1945 Sep 1 24:00
7:00 - +07 1947 Apr 1
- 8:00 - +08 1955 Jul 1
+ 8:00 - +08 1955 Jul 1 01:00
7:00 - +07 1959 Dec 31 23:00
8:00 - +08 1975 Jun 13
7:00 - +07
-# $OpenBSD: australasia,v 1.78 2024/01/02 22:43:20 millert Exp $
+# $OpenBSD: australasia,v 1.79 2024/02/05 17:07:23 millert Exp $
# tzdb data for Australasia and environs, and for much of the Pacific
# This file is in the public domain, so clarified as of
# French Polynesia
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct # Rikitea
+Zone Pacific/Gambier -8:59:48 - LMT 1912 Oct 1 # Rikitea
-9:00 - -09
-Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct
+Zone Pacific/Marquesas -9:18:00 - LMT 1912 Oct 1
-9:30 - -0930
-Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct # Papeete
+Zone Pacific/Tahiti -9:58:16 - LMT 1912 Oct 1 # Papeete
-10:00 - -10
# Clipperton (near North America) is administered from French Polynesia;
# it is uninhabited.
# Solomon Is
# excludes Bougainville, for which see Papua New Guinea
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct # Honiara
+Zone Pacific/Guadalcanal 10:39:48 - LMT 1912 Oct 1 # Honiara
11:00 - +11
# Tokelau
# Milne J. Civil time. Geogr J. 1899 Feb;13(2):173-94.
# https://www.jstor.org/stable/1774359
#
+# For the 1911/1912 establishment of standard time in French possessions, see:
+# Société Française de Physique, Recueil de constantes physiques (1913),
+# page 752, 18b.
+#
# A reliable and entertaining source about time zones is
# Derek Howse, Greenwich time and longitude, Philip Wilson Publishers (1997).
#
# ordaining - by a masterpiece of diplomatic flattery - that
# the Fourth of July should be celebrated twice in that year."
# This happened in 1892, according to the Evening News (Sydney) of 1892-07-20.
-# https://www.staff.science.uu.nl/~gent0113/idl/idl.htm
+# https://webspace.science.uu.nl/~gent0113/idl/idl_alaska_samoa.htm
# Although Shanks & Pottenger says they both switched to UT -11:30
# in 1911, and to -11 in 1950. many earlier sources give -11
-# $OpenBSD: etcetera,v 1.21 2022/10/31 15:35:12 millert Exp $
+# $OpenBSD: etcetera,v 1.22 2024/02/05 17:07:23 millert Exp $
# tzdb data for ships at sea and other miscellany
# This file is in the public domain, so clarified as of
# These entries are for uses not otherwise covered by the tz database.
# Their main practical use is for platforms like Android that lack
-# support for POSIX-style TZ strings. On such platforms these entries
+# support for POSIX.1-2017-style TZ strings. On such platforms these entries
# can be useful if the timezone database is wrong or if a ship or
# aircraft at sea is not in a timezone.
-# $OpenBSD: europe,v 1.91 2024/01/02 22:43:20 millert Exp $
+# $OpenBSD: europe,v 1.92 2024/02/05 17:07:23 millert Exp $
# tzdb data for Europe and environs
# This file is in the public domain, so clarified as of
# Czech Republic (Czechia)
#
-# From Paul Eggert (2018-04-15):
-# The source for Czech data is: Kdy začíná a končí letní čas. 2018-04-15.
+# From Ivan Benovic (2024-01-30):
+# https://www.slov-lex.sk/pravne-predpisy/SK/ZZ/1946/54/
+# (This is an official link to the Czechoslovak Summer Time Act of
+# March 8, 1946 that authorizes the Czechoslovak government to set the
+# exact dates of change to summer time and back to Central European Time.
+# The act also implicitly confirms Central European Time as the
+# official time zone of Czechoslovakia and currently remains in force
+# in both the Czech Republic and Slovakia.)
+# https://www.psp.cz/eknih/1945pns/tisky/t0216_00.htm
+# (This is a link to the original legislative proposal dating back to
+# February 22, 1946. The accompanying memorandum to the proposal says
+# that an advisory committee on European railroad transportation that
+# met in Brussels in October 1945 decided that the change of time
+# should be carried out in all participating countries in a strictly
+# coordinated manner....)
+#
+# From Paul Eggert (2024-01-30):
+# The source for Czech data is: Kdy začíná a končí letní čas.
# https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas
+# Its main text disagrees with its quoted sources only in 1918,
+# where the main text says spring and autumn transitions
+# occurred at 02:00 and 03:00 respectively (as usual),
+# whereas the 1918 source "Oznámení o zavedení letního času v roce 1918"
+# says transitions were at 01:00 and 02:00 respectively.
+# As the 1918 source appears to be a humorous piece, and it is
+# unlikely that Prague would have disagreed with its neighbors by an hour,
+# go with the main text for now.
+#
# We know of no English-language name for historical Czech winter time;
# abbreviate it as "GMT", as it happened to be GMT.
#
-# $OpenBSD: leap-seconds.list,v 1.2 2024/01/02 22:43:20 millert Exp $
+# $OpenBSD: leap-seconds.list,v 1.3 2024/02/05 17:07:23 millert Exp $
+# ATOMIC TIME.
+# The Coordinated Universal Time (UTC) is the reference time scale derived
+# from The "Temps Atomique International" (TAI) calculated by the Bureau
+# International des Poids et Mesures (BIPM) using a worldwide network of atomic
+# clocks. UTC differs from TAI by an integer number of seconds; it is the basis
+# of all activities in the world.
#
-# In the following text, the symbol '#' introduces
-# a comment, which continues from that symbol until
-# the end of the line. A plain comment line has a
-# whitespace character following the comment indicator.
-# There are also special comment lines defined below.
-# A special comment will always have a non-whitespace
-# character in column 2.
#
-# A blank line should be ignored.
+# ASTRONOMICAL TIME (UT1) is the time scale based on the rate of rotation of the earth.
+# It is now mainly derived from Very Long Baseline Interferometry (VLBI). The various
+# irregular fluctuations progressively detected in the rotation rate of the Earth lead
+# in 1972 to the replacement of UT1 by UTC as the reference time scale.
#
-# The following table shows the corrections that must
-# be applied to compute International Atomic Time (TAI)
-# from the Coordinated Universal Time (UTC) values that
-# are transmitted by almost all time services.
#
-# The first column shows an epoch as a number of seconds
-# since 1 January 1900, 00:00:00 (1900.0 is also used to
-# indicate the same epoch.) Both of these time stamp formats
-# ignore the complexities of the time scales that were
-# used before the current definition of UTC at the start
-# of 1972. (See note 3 below.)
-# The second column shows the number of seconds that
-# must be added to UTC to compute TAI for any timestamp
-# at or after that epoch. The value on each line is
-# valid from the indicated initial instant until the
-# epoch given on the next one or indefinitely into the
-# future if there is no next line.
-# (The comment on each line shows the representation of
-# the corresponding initial epoch in the usual
-# day-month-year format. The epoch always begins at
-# 00:00:00 UTC on the indicated day. See Note 5 below.)
+# LEAP SECOND
+# Atomic clocks are more stable than the rate of the earth rotation since the latter
+# undergoes a full range of geophysical perturbations at various time scales: lunisolar
+# and core-mantle torques, atmospheric and oceanic effetcs, etc.
+# Leap seconds are needed to keep the two time scales in agreement, i.e. UT1-UTC smaller
+# than 0.9 second. Therefore, when necessary a "leap second" is applied to UTC.
+# Since the adoption of this system in 1972 it has been necessary to add a number of seconds to UTC,
+# firstly due to the initial choice of the value of the second (1/86400 mean solar day of
+# the year 1820) and secondly to the general slowing down of the Earth's rotation. It is
+# theorically possible to have a negative leap second (a second removed from UTC), but so far,
+# all leap seconds have been positive (a second has been added to UTC). Based on what we know about
+# the earth's rotation, it is unlikely that we will ever have a negative leap second.
#
-# Important notes:
#
-# 1. Coordinated Universal Time (UTC) is often referred to
-# as Greenwich Mean Time (GMT). The GMT time scale is no
-# longer used, and the use of GMT to designate UTC is
-# discouraged.
+# HISTORY
+# The first leap second was added on June 30, 1972. Until yhe year 2000, it was necessary in average to add a
+# leap second at a rate of 1 to 2 years. Since the year 2000 leap seconds are introduced with an
+# average interval of 3 to 4 years due to the acceleration of the Earth rotation speed.
#
-# 2. The UTC time scale is realized by many national
-# laboratories and timing centers. Each laboratory
-# identifies its realization with its name: Thus
-# UTC(NIST), UTC(USNO), etc. The differences among
-# these different realizations are typically on the
-# order of a few nanoseconds (i.e., 0.000 000 00x s)
-# and can be ignored for many purposes. These differences
-# are tabulated in Circular T, which is published monthly
-# by the International Bureau of Weights and Measures
-# (BIPM). See www.bipm.org for more information.
#
-# 3. The current definition of the relationship between UTC
-# and TAI dates from 1 January 1972. A number of different
-# time scales were in use before that epoch, and it can be
-# quite difficult to compute precise timestamps and time
-# intervals in those "prehistoric" days. For more information,
-# consult:
+# RESPONSABILITY OF THE DECISION TO INTRODUCE A LEAP SECOND IN UTC
+# The decision to introduce a leap second in UTC is the responsibility of the Earth Orientation Center of
+# the International Earth Rotation and reference System Service (IERS). This center is located at Paris
+# Observatory. According to international agreements, leap seconds should only be scheduled for certain dates:
+# first preference is given to the end of December and June, and second preference at the end of March
+# and September. Since the introduction of leap seconds in 1972, only dates in June and December were used.
#
-# The Explanatory Supplement to the Astronomical
-# Ephemeris.
-# or
-# Terry Quinn, "The BIPM and the Accurate Measurement
-# of Time," Proc. of the IEEE, Vol. 79, pp. 894-905,
-# July, 1991. <http://dx.doi.org/10.1109/5.84965>
-# reprinted in:
-# Christine Hackman and Donald B Sullivan (eds.)
-# Time and Frequency Measurement
-# American Association of Physics Teachers (1996)
-# <http://tf.nist.gov/general/pdf/1168.pdf>, pp. 75-86
+# Questions or comments to:
+# Christian Bizouard: christian.bizouard@obspm.fr
+# Earth orientation Center of the IERS
+# Paris Observatory, France
#
-# 4. The decision to insert a leap second into UTC is currently
-# the responsibility of the International Earth Rotation and
-# Reference Systems Service. (The name was changed from the
-# International Earth Rotation Service, but the acronym IERS
-# is still used.)
#
-# Leap seconds are announced by the IERS in its Bulletin C.
#
-# See www.iers.org for more details.
+# COPYRIGHT STATUS OF THIS FILE
+# This file is in the public domain.
#
-# Every national laboratory and timing center uses the
-# data from the BIPM and the IERS to construct UTC(lab),
-# their local realization of UTC.
#
-# Although the definition also includes the possibility
-# of dropping seconds ("negative" leap seconds), this has
-# never been done and is unlikely to be necessary in the
-# foreseeable future.
+# VALIDITY OF THE FILE
+# It is important to express the validity of the file. These next two dates are
+# given in units of seconds since 1900.0.
#
-# 5. If your system keeps time as the number of seconds since
-# some epoch (e.g., NTP timestamps), then the algorithm for
-# assigning a UTC time stamp to an event that happens during a positive
-# leap second is not well defined. The official name of that leap
-# second is 23:59:60, but there is no way of representing that time
-# in these systems.
-# Many systems of this type effectively stop the system clock for
-# one second during the leap second and use a time that is equivalent
-# to 23:59:59 UTC twice. For these systems, the corresponding TAI
-# timestamp would be obtained by advancing to the next entry in the
-# following table when the time equivalent to 23:59:59 UTC
-# is used for the second time. Thus the leap second which
-# occurred on 30 June 1972 at 23:59:59 UTC would have TAI
-# timestamps computed as follows:
+# 1) Last update of the file.
#
-# ...
-# 30 June 1972 23:59:59 (2287785599, first time): TAI= UTC + 10 seconds
-# 30 June 1972 23:59:60 (2287785599,second time): TAI= UTC + 11 seconds
-# 1 July 1972 00:00:00 (2287785600) TAI= UTC + 11 seconds
-# ...
+# Updated through IERS Bulletin C (https://hpiers.obspm.fr/iers/bul/bulc/bulletinc.dat)
#
-# If your system realizes the leap second by repeating 00:00:00 UTC twice
-# (this is possible but not usual), then the advance to the next entry
-# in the table must occur the second time that a time equivalent to
-# 00:00:00 UTC is used. Thus, using the same example as above:
+# The following line shows the last update of this file in NTP timestamp:
#
-# ...
-# 30 June 1972 23:59:59 (2287785599): TAI= UTC + 10 seconds
-# 30 June 1972 23:59:60 (2287785600, first time): TAI= UTC + 10 seconds
-# 1 July 1972 00:00:00 (2287785600,second time): TAI= UTC + 11 seconds
-# ...
+#$ 3913697179
#
-# in both cases the use of timestamps based on TAI produces a smooth
-# time scale with no discontinuity in the time interval. However,
-# although the long-term behavior of the time scale is correct in both
-# methods, the second method is technically not correct because it adds
-# the extra second to the wrong day.
+# 2) Expiration date of the file given on a semi-annual basis: last June or last December
#
-# This complexity would not be needed for negative leap seconds (if they
-# are ever used). The UTC time would skip 23:59:59 and advance from
-# 23:59:58 to 00:00:00 in that case. The TAI offset would decrease by
-# 1 second at the same instant. This is a much easier situation to deal
-# with, since the difficulty of unambiguously representing the epoch
-# during the leap second does not arise.
+# File expires on 28 December 2024
#
-# Some systems implement leap seconds by amortizing the leap second
-# over the last few minutes of the day. The frequency of the local
-# clock is decreased (or increased) to realize the positive (or
-# negative) leap second. This method removes the time step described
-# above. Although the long-term behavior of the time scale is correct
-# in this case, this method introduces an error during the adjustment
-# period both in time and in frequency with respect to the official
-# definition of UTC.
+# Expire date in NTP timestamp:
#
-# Questions or comments to:
-# Judah Levine
-# Time and Frequency Division
-# NIST
-# Boulder, Colorado
-# Judah.Levine@nist.gov
+#@ 3944332800
#
-# Last Update of leap second values: 8 July 2016
#
-# The following line shows this last update date in NTP timestamp
-# format. This is the date on which the most recent change to
-# the leap second data was added to the file. This line can
-# be identified by the unique pair of characters in the first two
-# columns as shown below.
+# LIST OF LEAP SECONDS
+# NTP timestamp (X parameter) is the number of seconds since 1900.0
#
-#$ 3676924800
+# MJD: The Modified Julian Day number. MJD = X/86400 + 15020
#
-# The NTP timestamps are in units of seconds since the NTP epoch,
-# which is 1 January 1900, 00:00:00. The Modified Julian Day number
-# corresponding to the NTP time stamp, X, can be computed as
+# DTAI: The difference DTAI= TAI-UTC in units of seconds
+# It is the quantity to add to UTC to get the time in TAI
#
-# X/86400 + 15020
+# Day Month Year : epoch in clear
#
-# where the first term converts seconds to days and the second
-# term adds the MJD corresponding to the time origin defined above.
-# The integer portion of the result is the integer MJD for that
-# day, and any remainder is the time of day, expressed as the
-# fraction of the day since 0 hours UTC. The conversion from day
-# fraction to seconds or to hours, minutes, and seconds may involve
-# rounding or truncation, depending on the method used in the
-# computation.
+#NTP Time DTAI Day Month Year
#
-# The data in this file will be updated periodically as new leap
-# seconds are announced. In addition to being entered on the line
-# above, the update time (in NTP format) will be added to the basic
-# file name leap-seconds to form the name leap-seconds.<NTP TIME>.
-# In addition, the generic name leap-seconds.list will always point to
-# the most recent version of the file.
+2272060800 10 # 1 Jan 1972
+2287785600 11 # 1 Jul 1972
+2303683200 12 # 1 Jan 1973
+2335219200 13 # 1 Jan 1974
+2366755200 14 # 1 Jan 1975
+2398291200 15 # 1 Jan 1976
+2429913600 16 # 1 Jan 1977
+2461449600 17 # 1 Jan 1978
+2492985600 18 # 1 Jan 1979
+2524521600 19 # 1 Jan 1980
+2571782400 20 # 1 Jul 1981
+2603318400 21 # 1 Jul 1982
+2634854400 22 # 1 Jul 1983
+2698012800 23 # 1 Jul 1985
+2776982400 24 # 1 Jan 1988
+2840140800 25 # 1 Jan 1990
+2871676800 26 # 1 Jan 1991
+2918937600 27 # 1 Jul 1992
+2950473600 28 # 1 Jul 1993
+2982009600 29 # 1 Jul 1994
+3029443200 30 # 1 Jan 1996
+3076704000 31 # 1 Jul 1997
+3124137600 32 # 1 Jan 1999
+3345062400 33 # 1 Jan 2006
+3439756800 34 # 1 Jan 2009
+3550089600 35 # 1 Jul 2012
+3644697600 36 # 1 Jul 2015
+3692217600 37 # 1 Jan 2017
#
-# This update procedure will be performed only when a new leap second
-# is announced.
+# A hash code has been generated to be able to verify the integrity
+# of this file. For more information about using this hash code,
+# please see the readme file in the 'source' directory :
+# https://hpiers.obspm.fr/iers/bul/bulc/ntp/sources/README
#
-# The following entry specifies the expiration date of the data
-# in this file in units of seconds since the origin at the instant
-# 1 January 1900, 00:00:00. This expiration date will be changed
-# at least twice per year whether or not a new leap second is
-# announced. These semi-annual changes will be made no later
-# than 1 June and 1 December of each year to indicate what
-# action (if any) is to be taken on 30 June and 31 December,
-# respectively. (These are the customary effective dates for new
-# leap seconds.) This expiration date will be identified by a
-# unique pair of characters in columns 1 and 2 as shown below.
-# In the unlikely event that a leap second is announced with an
-# effective date other than 30 June or 31 December, then this
-# file will be edited to include that leap second as soon as it is
-# announced or at least one month before the effective date
-# (whichever is later).
-# If an announcement by the IERS specifies that no leap second is
-# scheduled, then only the expiration date of the file will
-# be advanced to show that the information in the file is still
-# current -- the update time stamp, the data and the name of the file
-# will not change.
-#
-# Updated through IERS Bulletin C66
-# File expires on: 28 June 2024
-#
-#@ 3928521600
-#
-2272060800 10 # 1 Jan 1972
-2287785600 11 # 1 Jul 1972
-2303683200 12 # 1 Jan 1973
-2335219200 13 # 1 Jan 1974
-2366755200 14 # 1 Jan 1975
-2398291200 15 # 1 Jan 1976
-2429913600 16 # 1 Jan 1977
-2461449600 17 # 1 Jan 1978
-2492985600 18 # 1 Jan 1979
-2524521600 19 # 1 Jan 1980
-2571782400 20 # 1 Jul 1981
-2603318400 21 # 1 Jul 1982
-2634854400 22 # 1 Jul 1983
-2698012800 23 # 1 Jul 1985
-2776982400 24 # 1 Jan 1988
-2840140800 25 # 1 Jan 1990
-2871676800 26 # 1 Jan 1991
-2918937600 27 # 1 Jul 1992
-2950473600 28 # 1 Jul 1993
-2982009600 29 # 1 Jul 1994
-3029443200 30 # 1 Jan 1996
-3076704000 31 # 1 Jul 1997
-3124137600 32 # 1 Jan 1999
-3345062400 33 # 1 Jan 2006
-3439756800 34 # 1 Jan 2009
-3550089600 35 # 1 Jul 2012
-3644697600 36 # 1 Jul 2015
-3692217600 37 # 1 Jan 2017
-#
-# the following special comment contains the
-# hash value of the data in this file computed
-# use the secure hash algorithm as specified
-# by FIPS 180-1. See the files in ~/pub/sha for
-# the details of how this hash value is
-# computed. Note that the hash computation
-# ignores comments and whitespace characters
-# in data lines. It includes the NTP values
-# of both the last modification time and the
-# expiration time of the file, but not the
-# white space on those lines.
-# the hash line is also ignored in the
-# computation.
-#
-#h 16edd0f0 3666784f 37db6bdd e74ced87 59af48f1
+#h 9dac5845 8acd32c0 2947d462 daf4a943 f58d9391
-# $OpenBSD: northamerica,v 1.85 2024/01/02 22:43:20 millert Exp $
+# $OpenBSD: northamerica,v 1.86 2024/02/05 17:07:23 millert Exp $
# tzdb data for North and Central America and environs
# This file is in the public domain, so clarified as of
# <http://cs.ucla.edu/~eggert/The-Waste-of-Daylight-19th.pdf>
# [PDF] (1914-03)
#
+# For the 1911/1912 establishment of standard time in French possessions, see:
+# Société Française de Physique, Recueil de constantes physiques (1913),
+# page 752, 18b.
+#
# See the 'europe' file for Greenland.
# Canada
# From Paul Eggert (2014-10-18):
# H. David Matthews and Mary Vincent's map
# "It's about TIME", _Canadian Geographic_ (September-October 1998)
-# http://www.canadiangeographic.ca/Magazine/SO98/alacarte.asp
+# https://web.archive.org/web/19990827055050/https://canadiangeographic.ca/SO98/geomap.htm
# contains detailed boundaries for regions observing nonstandard
# time and daylight saving time arrangements in Canada circa 1998.
#
# Some cities in the United States have pushed the deadline back
# three weeks and will change over from daylight saving in October.
+# From Chris Walton (2024-01-09):
+# The [Toronto] changes in 1947, 1948, and 1949 took place at 2:00 a.m. local
+# time instead of midnight.... Toronto Daily Star - ...
+# April 2, 1947 - Page 39 ... April 7, 1948 - Page 13 ...
+# April 2, 1949 - Page 1 ... April 7, 1949 - Page 24 ...
+# November 25, 1949 - Page 52 ... April 21, 1950 - Page 14 ...
+# September 19, 1950 - Page 46 ... September 20, 1950 - Page 3 ...
+# November 24, 1950 - Page 21
+
# From Arthur David Olson (2010-07-17):
#
# "Standard Time and Time Zones in Canada" appeared in
Rule Toronto 1928 1937 - Apr Sun>=25 2:00 1:00 D
Rule Toronto 1938 1940 - Apr lastSun 2:00 1:00 D
Rule Toronto 1938 1939 - Sep lastSun 2:00 0 S
-Rule Toronto 1945 1946 - Sep lastSun 2:00 0 S
-Rule Toronto 1946 only - Apr lastSun 2:00 1:00 D
-Rule Toronto 1947 1949 - Apr lastSun 0:00 1:00 D
-Rule Toronto 1947 1948 - Sep lastSun 0:00 0 S
-Rule Toronto 1949 only - Nov lastSun 0:00 0 S
-Rule Toronto 1950 1973 - Apr lastSun 2:00 1:00 D
-Rule Toronto 1950 only - Nov lastSun 2:00 0 S
+Rule Toronto 1945 1948 - Sep lastSun 2:00 0 S
+Rule Toronto 1946 1973 - Apr lastSun 2:00 1:00 D
+Rule Toronto 1949 1950 - Nov lastSun 2:00 0 S
Rule Toronto 1951 1956 - Sep lastSun 2:00 0 S
# Shanks & Pottenger say Toronto ended DST a week early in 1971,
# namely on 1971-10-24, but Mark Brader wrote (2003-05-31) that this
# Martinique
# Zone NAME STDOFF RULES FORMAT [UNTIL]
Zone America/Martinique -4:04:20 - LMT 1890 # Fort-de-France
- -4:04:20 - FFMT 1911 May # Fort-de-France MT
+ -4:04:20 - FFMT 1911 May 1 # Fort-de-France MT
-4:00 - AST 1980 Apr 6
-4:00 1:00 ADT 1980 Sep 28
-4:00 - AST
# St Pierre and Miquelon
# There are too many St Pierres elsewhere, so we'll use 'Miquelon'.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
+Zone America/Miquelon -3:44:40 - LMT 1911 Jun 15 # St Pierre
-4:00 - AST 1980 May
-3:00 - -03 1987
-3:00 Canada -03/-02
-# $OpenBSD: southamerica,v 1.80 2024/01/02 22:43:20 millert Exp $
+# $OpenBSD: southamerica,v 1.81 2024/02/05 17:07:23 millert Exp $
# tzdb data for South America and environs
# This file is in the public domain, so clarified as of
-3:00 - -03
# French Guiana
+# For the 1911/1912 establishment of standard time in French possessions, see:
+# Société Française de Physique, Recueil de constantes physiques (1913),
+# page 752, 18b.
# Zone NAME STDOFF RULES FORMAT [UNTIL]
-Zone America/Cayenne -3:29:20 - LMT 1911 Jul
+Zone America/Cayenne -3:29:20 - LMT 1911 Jul 1
-4:00 - -04 1967 Oct
-3:00 - -03
-# Generate zic format 'leapseconds' from NIST format 'leap-seconds.list'.
+# Generate zic format 'leapseconds' from NIST/IERS format 'leap-seconds.list'.
# This file is in the public domain.
print "# This file is in the public domain."
print ""
print "# This file is generated automatically from the data in the public-domain"
- print "# NIST format leap-seconds.list file, which can be copied from"
- print "# <ftp://ftp.nist.gov/pub/time/leap-seconds.list>"
- print "# or <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>."
- print "# The NIST file is used instead of its IERS upstream counterpart"
+ print "# NIST/IERS format leap-seconds.list file, which can be copied from"
print "# <https://hpiers.obspm.fr/iers/bul/bulc/ntp/leap-seconds.list>"
- print "# because under US law the NIST file is public domain"
- print "# whereas the IERS file's copyright and license status is unclear."
+ print "# or, in a variant with different comments, from"
+ print "# <ftp://ftp.boulder.nist.gov/pub/time/leap-seconds.list>."
print "# For more about leap-seconds.list, please see"
print "# The NTP Timescale and Leap Seconds"
print "# <https://www.eecis.udel.edu/~mills/leap.html>."
# Process the input line LINE and save it for later output.
function process_input_line(line, \
- f, field, end, i, n, r, startdef, \
+ f, field, end, n, outline, r, \
linkline, ruleline, zoneline)
{
# Remove comments, normalize spaces, and append a space to each line.
}
# Abbreviate "max", "min", "only" and month names.
- gsub(/ max /, " ma ", line)
- gsub(/ min /, " mi ", line)
+ # Although "max" and "min" can both be abbreviated to just "m",
+ # the longer forms "ma" and "mi" are needed with zic 2023d and earlier.
+ gsub(/ max /, dataform == "vanguard" ? " m " : " ma ", line)
+ gsub(/ min /, dataform == "vanguard" ? " m " : " mi ", line)
gsub(/ only /, " o ", line)
gsub(/ Jan /, " Ja ", line)
gsub(/ Feb /, " F ", line)
rule_used[r] = 1
}
- # If this zone supersedes an earlier one, delete the earlier one
- # from the saved output lines.
- startdef = ""
if (zoneline)
zonename = startdef = field[2]
else if (linkline)
zonename = startdef = field[3]
else if (ruleline)
zonename = ""
- if (startdef) {
- i = zonedef[startdef]
- if (i) {
- do
- output_line[i - 1] = ""
- while (output_line[i++] ~ /^[-+0-9]/);
- }
- }
- zonedef[zonename] = nout + 1
- # Save the line for later output.
- output_line[nout++] = make_line(n, field)
+ # Save the information for later output.
+ outline = make_line(n, field)
+ if (ruleline)
+ rule_output_line[nrule_out++] = outline
+ else if (linkline) {
+ # In vanguard format with Gawk, links are output sorted by destination.
+ if (dataform == "vanguard" && PROCINFO["version"])
+ linkdef[zonename] = field[2]
+ else
+ link_output_line[nlink_out++] = outline
+ }else
+ zonedef[zonename] = (zoneline ? "" : zonedef[zonename] "\n") outline
}
function omit_unused_rules( \
i, field)
{
- for (i = 0; i < nout; i++) {
- split(output_line[i], field)
- if (field[1] == "R" && !rule_used[field[2]]) {
- output_line[i] = ""
- }
+ for (i = 0; i < nrule_out; i++) {
+ split(rule_output_line[i], field)
+ if (!rule_used[field[2]])
+ rule_output_line[i] = ""
}
}
function abbreviate_rule_names( \
- abbr, f, field, i, n, r)
+ abbr, f, field, i, n, newdef, newline, r, \
+ zoneline, zonelines, zonename)
{
- for (i = 0; i < nout; i++) {
- n = split(output_line[i], field)
+ for (i = 0; i < nrule_out; i++) {
+ n = split(rule_output_line[i], field)
if (n) {
- f = field[1] == "Z" ? 4 : field[1] == "L" ? 0 : 2
- r = field[f]
+ r = field[2]
if (r ~ /^[^-+0-9]/) {
abbr = rule[r]
if (!abbr) {
rule[r] = abbr = gen_rule_name(r)
}
- field[f] = abbr
- output_line[i] = make_line(n, field)
+ field[2] = abbr
+ rule_output_line[i] = make_line(n, field)
}
}
}
+ for (zonename in zonedef) {
+ zonelines = split(zonedef[zonename], zoneline, /\n/)
+ newdef = ""
+ for (i = 1; i <= zonelines; i++) {
+ newline = zoneline[i]
+ n = split(newline, field)
+ f = i == 1 ? 4 : 2
+ r = rule[field[f]]
+ if (r) {
+ field[f] = r
+ newline = make_line(n, field)
+ }
+ newdef = (newdef ? newdef "\n" : "") newline
+ }
+ zonedef[zonename] = newdef
+ }
}
function output_saved_lines( \
- i)
+ i, zonename)
{
- for (i = 0; i < nout; i++)
- if (output_line[i])
- print output_line[i]
+ for (i = 0; i < nrule_out; i++)
+ if (rule_output_line[i])
+ print rule_output_line[i]
+
+ # When using gawk, output zones sorted by name.
+ # This makes the output a bit more compressible.
+ PROCINFO["sorted_in"] = "@ind_str_asc"
+ for (zonename in zonedef)
+ print zonedef[zonename]
+
+ if (nlink_out)
+ for (i = 0; i < nlink_out; i++)
+ print link_output_line[i]
+ else {
+ # When using gawk, output links sorted by destination.
+ # This also helps compressibility a bit.
+ PROCINFO["sorted_in"] = "@val_type_asc"
+ for (zonename in linkdef)
+ printf "L %s %s\n", linkdef[zonename], zonename
+ }
}
BEGIN {