[tz] [PATCH] New file 'pre1970' for zones that differ only in pre-1970 time stamps.
gunther vermeir
gunther.vermeir at oracle.com
Fri Aug 30 08:51:35 UTC 2013
Hello,
so if i'm correct pre-1970 data will be moved out to another file, for
Oracle RDBMS we have our own compiler who works directly on the TZdata
files.
We have a lot of customer who use times from before 1970.
please do not move things out without enough time to adapt any
structural changes to the actual dataset.
Especially for a big corporate env like Oracle it really takes time to
get things done.
if there is so much reluctance to have pre-1970 dates in a result set
then surely adapting the *parser* to omit pre-1970 dates would be more
appropriate.
I might have missed a really good reason why this all has been done ,
but personally i do not see any added value of moving pre-1970 TZ
definitions out to an other file,
it simply complicates things, breaks current behaviour and is harder to
parse manually/look at it
Regards,
Gunther
Oracle RDBMS TZ coordinator
On 30/08/2013 10:09, Paul Eggert wrote:
> This lets us preserve information about pre-1970 time stamps when
> we change a Zone to a Link to another zone whose time stamps agree
> after 1970. This should address concerns about some recent
> changes that removed this information. This implementation is a
> stripped-down version of a suggestion by Andrew Main (Zefram) in
> <http://mm.icann.org/pipermail/tz/2013-August/019615.html> and
> <http://mm.icann.org/pipermail/tz/2013-August/019639.html> to
> allow filtering tz data by date range. Unlike Zefram's
> suggestion, this implementation supports only two date ranges,
> namely 1970 on, using 'make BACKWARD=backward'; and all dates,
> using 'make BACKWARD="pre1970 back-pre1970"'. At some point I'd
> like to improve it to support arbitrary date ranges, but at least
> we've now restored the data whose loss was of some concern.
> * .gitignore: Add back-pre1970.
> * Makefile (BACKWARD): New macro.
> (YDATA): Use it instead of 'backward'.
> (AWK_SCRIPTS): New macro, with additional script back-pre1970.awk.
> (MISC): Use it.
> (back-pre1970): New rule.
> (clean_misc): Clean back-pre1970. Also clean time.tab, while we're
> at it.
> (check_public): Don't require pre1970 to stand alone.
> * pre1970, back-pre1970.awk: New files.
> ---
> .gitignore | 1 +
> Makefile | 32 +++++-
> back-pre1970.awk | 18 ++++
> pre1970 | 291 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 337 insertions(+), 5 deletions(-)
> create mode 100644 back-pre1970.awk
> create mode 100644 pre1970
>
> diff --git a/.gitignore b/.gitignore
> index 18dbbcc..28b1bc9 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -4,6 +4,7 @@
> *.txt
> *~
> ChangeLog
> +back-pre1970
> date
> leapseconds
> time.tab
> diff --git a/Makefile b/Makefile
> index a74d1a7..ffddb08 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -49,6 +49,22 @@ POSIXRULES= America/New_York
>
> ZONETABTYPE= zone
>
> +# How to support obsolescent time zones in a backward-compatible way.
> +# This variable affects only pre-1970 time stamps, on hosts that support them.
> +# It has two possible values, 'backward' and 'pre1970 back-pre1970'.
> +#
> +# 'backward' is the traditional approach, and is simpler and more efficient;
> +# it is designed to generate one zone for each region where clocks have agreed
> +# since 1970.
> +#
> +# 'pre1970 back-pre1970' can generate more than one zone in that situation,
> +# which means it can preserve a bit of pre-1970 data that 'backward' does not;
> +# almost all pre-1970 data is missing, though, so don't get your hopes up.
> +#
> +# Sometimes 'backward' is more-compatible with earlier versions of this database,
> +# and sometimes 'pre1970 back-pre1970' is; it depends on the situation.
> +BACKWARD= backward
> +
> # Also see TZDEFRULESTRING below, which takes effect only
> # if the time zone files cannot be accessed.
>
> @@ -322,7 +338,7 @@ COMMON= Makefile
> DOCS= README Theory $(MANS) date.1
> PRIMARY_YDATA= africa antarctica asia australasia \
> europe northamerica southamerica
> -YDATA= $(PRIMARY_YDATA) pacificnew etcetera backward
> +YDATA= $(PRIMARY_YDATA) pacificnew etcetera $(BACKWARD)
> NDATA= systemv factory
> SDATA= solar87 solar88 solar89
> TDATA= $(YDATA) $(NDATA) $(SDATA)
> @@ -330,9 +346,10 @@ TABDATA= iso3166.tab time.tab zone.tab
> DATA= $(YDATA) $(NDATA) $(SDATA) $(TABDATA) \
> leap-seconds.list yearistype.sh
> WEB_PAGES= tz-art.htm tz-link.htm
> +AWK_SCRIPTS= back-pre1970.awk checktab.awk leapseconds.awk zone-time.awk
> MISC= usno1988 usno1989 usno1989a usno1995 usno1997 usno1998 \
> - $(WEB_PAGES) checktab.awk leapseconds.awk workman.sh \
> - zoneinfo2tdf.pl
> + $(WEB_PAGES) $(AWK_SCRIPTS) \
> + workman.sh zoneinfo2tdf.pl
> ENCHILADA= $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC)
>
> # And for the benefit of csh users on systems that assume the user
> @@ -423,6 +440,9 @@ zones: $(REDO)
> time.tab: $(YDATA) zone.tab zone-time.awk
> $(AWK) -f zone-time.awk $(YDATA) >$@
>
> +back-pre1970: pre1970 backward
> + $(AWK) -v pre1970=pre1970 -f $@.awk backward >$@
> +
> $(TZLIB): $(LIBOBJS)
> -mkdir $(TOPDIR) $(LIBDIR)
> ar ru $@ $(LIBOBJS)
> @@ -457,6 +477,7 @@ check_web: $(WEB_PAGES)
>
> clean_misc:
> rm -f core *.o *.out \
> + back-pre1970 time.tab \
> date leapseconds tzselect version.h zdump zic yearistype
> clean: clean_misc
> rm -f -r tzpublic
> @@ -488,7 +509,7 @@ set-timestamps:
> $$cmd || exit; \
> done
>
> -# The zics below ensure that each data file can stand on its own.
> +# The zics below ensure that each non-pre1970 data file can stand on its own.
> # We also do an all-files run to catch links to links.
>
> check_public: $(ENCHILADA)
> @@ -496,7 +517,8 @@ check_public: $(ENCHILADA)
> make "CFLAGS=$(GCC_DEBUG_FLAGS)"
> mkdir tzpublic
> for i in $(TDATA) ; do \
> - $(zic) -v -d tzpublic $$i 2>&1 || exit; \
> + test $$i = pre1970 || $(zic) -v -d tzpublic $$i 2>&1 \
> + || exit; \
> done
> $(zic) -v -d tzpublic $(TDATA)
> rm -f -r tzpublic
> diff --git a/back-pre1970.awk b/back-pre1970.awk
> new file mode 100644
> index 0000000..f7c54fc
> --- /dev/null
> +++ b/back-pre1970.awk
> @@ -0,0 +1,18 @@
> +# Generate 'back-pre1970' from the two input files 'pre1970' and 'backward'.
> +# The output consists of all lines in 'backward' that are not links to
> +# files mentioned in 'pre1970'. Think of it as 'backward' minus 'pre1970'.
> +
> +# The 'backward' file is the input.
> +# The awk variable 'pre1970' contains the name of the pre1970 file.
> +
> +# This file is in the public domain.
> +
> +# Contributed by Paul Eggert.
> +
> +BEGIN {
> + while ((getline <pre1970) == 1)
> + if ($1 == "Zone")
> + pre1970_zone[$2] = 1
> +}
> +
> +! (/^Link/ && pre1970_zone[$3]) { print }
> diff --git a/pre1970 b/pre1970
> new file mode 100644
> index 0000000..d8b8f34
> --- /dev/null
> +++ b/pre1970
> @@ -0,0 +1,291 @@
> +# Pre-1970 data
> +
> +# This file is in the public domain.
> +
> +# This file contains zones that were formerly in other source files,
> +# but were later removed or replaced by backward-compatibility links
> +# as they differ from other zones only in pre-1970 time stamps.
> +
> +# Although the tz database focuses on post-1970 time stamps, these
> +# entries are retained here as they may be of some use to people
> +# interested in pre-1970 time stamps, even though they cover only a
> +# tiny sliver of pre-1970 data and are unreliable for that data.
> +# Also, these entries can help with backward compatibility with some
> +# old versions of the tz database. They are incompatible with other
> +# old versions of the database, though; it depends on which old
> +# version you're interested in.
> +
> +# Entries are sorted by Zone name. Each entry is preceded by the name
> +# of the country that the entry is in, along with any other commentary
> +# and rules associated with the entry. Some rules, e.g., 'Canada',
> +# are defined by other source files; this file is not intended to be
> +# used without those other files.
> +
> +# Zone NAME GMTOFF RULES FORMAT [UNTIL]
> +
> +# Mali
> +# no longer different from Bamako, but too famous to omit
> +Zone Africa/Timbuktu -0:12:04 - LMT 1912
> + 0:00 - GMT
> +
> +# Anguilla
> +Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2
> + -4:00 - AST
> +
> +# Antigua and Barbuda
> +Zone America/Antigua -4:07:12 - LMT 1912 Mar 2
> + -5:00 - EST 1951
> + -4:00 - AST
> +
> +# Argentina
> +# Chubut (CH)
> +# The name "Comodoro Rivadavia" exceeds the 14-byte POSIX limit.
> +Zone America/Argentina/ComodRivadavia -4:30:00 - LMT 1894 Oct 31
> + -4:16:48 - CMT 1920 May
> + -4:00 - ART 1930 Dec
> + -4:00 Arg AR%sT 1969 Oct 5
> + -3:00 Arg AR%sT 1991 Mar 3
> + -4:00 - WART 1991 Oct 20
> + -3:00 Arg AR%sT 1999 Oct 3
> + -4:00 Arg AR%sT 2000 Mar 3
> + -3:00 - ART 2004 Jun 1
> + -4:00 - WART 2004 Jun 20
> + -3:00 - ART
> +
> +# Aruba
> +Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad
> + -4:30 - ANT 1965 # Netherlands Antilles Time
> + -4:00 - AST
> +
> +# Canada
> +
> +Zone America/Atikokan -6:06:28 - LMT 1895
> + -6:00 Canada C%sT 1940 Sep 29
> + -6:00 1:00 CDT 1942 Feb 9 2:00s
> + -6:00 Canada C%sT 1945 Sep 30 2:00
> + -5:00 - EST
> +
> +Zone America/Blanc-Sablon -3:48:28 - LMT 1884
> + -4:00 Canada A%sT 1970
> + -4:00 - AST
> +
> +# Cayman Is
> +Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
> + -5:07:12 - KMT 1912 Feb # Kingston Mean Time
> + -5:00 - EST
> +
> +# Canada
> +Zone America/Coral_Harbour -5:32:40 - LMT 1884
> + -5:00 NT_YK E%sT 1946
> + -5:00 - EST
> +
> +# Curacao
> +Zone America/Curacao -4:35:47 - LMT 1912 Feb 12 # Willemstad
> + -4:30 - ANT 1965 # Netherlands Antilles Time
> + -4:00 - AST
> +
> +# Dominica
> +Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau
> + -4:00 - AST
> +
> +# Mexico
> +Zone America/Ensenada -7:46:28 - LMT 1922 Jan 1 0:13:32
> + -8:00 - PST 1927 Jun 10 23:00
> + -7:00 - MST 1930 Nov 16
> + -8:00 - PST 1942 Apr
> + -7:00 - MST 1949 Jan 14
> + -8:00 - PST 1996
> + -8:00 Mexico P%sT
> +
> +# US
> +Zone America/Fort_Wayne -5:00 US E%sT 1946
> + -5:00 - EST # Always EST as of 1986
> +
> +# Grenada
> +Zone America/Grenada -4:07:00 - LMT 1911 Jul # St George's
> + -4:00 - AST
> +
> +# Guadeloupe
> +Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe a Pitre
> + -4:00 - AST
> +
> +# Canada
> +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
> +Rule Mont 1917 only - Mar 25 2:00 1:00 D
> +Rule Mont 1917 only - Apr 24 0:00 0 S
> +Rule Mont 1919 only - Mar 31 2:30 1:00 D
> +Rule Mont 1919 only - Oct 25 2:30 0 S
> +Rule Mont 1920 only - May 2 2:30 1:00 D
> +Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
> +Rule Mont 1921 only - May 1 2:00 1:00 D
> +Rule Mont 1922 only - Apr 30 2:00 1:00 D
> +Rule Mont 1924 only - May 17 2:00 1:00 D
> +Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
> +Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
> +# The 1927-to-1937 rules can be expressed more simply as
> +# Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
> +# Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
> +# The rules below avoid use of 24:00
> +# (which pre-1998 versions of zic cannot handle).
> +Rule Mont 1927 only - May 1 0:00 1:00 D
> +Rule Mont 1927 1932 - Sep lastSun 0:00 0 S
> +Rule Mont 1928 1931 - Apr lastSun 0:00 1:00 D
> +Rule Mont 1932 only - May 1 0:00 1:00 D
> +Rule Mont 1933 1940 - Apr lastSun 0:00 1:00 D
> +Rule Mont 1933 only - Oct 1 0:00 0 S
> +Rule Mont 1934 1939 - Sep lastSun 0:00 0 S
> +Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
> +Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
> +Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
> +Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
> +Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
> +# Zone NAME GMTOFF RULES FORMAT [UNTIL]
> +Zone America/Montreal -4:54:16 - LMT 1884
> + -5:00 Mont E%sT 1918
> + -5:00 Canada E%sT 1919
> + -5:00 Mont E%sT 1942 Feb 9 2:00s
> + -5:00 Canada E%sT 1946
> + -5:00 Mont E%sT 1974
> + -5:00 Canada E%sT
> +
> +# Montserrat
> +Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
> + -4:00 - AST
> +
> +# Bahamas
> +# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
> +Rule Bahamas 1964 1975 - Oct lastSun 2:00 0 S
> +Rule Bahamas 1964 1975 - Apr lastSun 2:00 1:00 D
> +# Zone NAME GMTOFF RULES FORMAT [UNTIL]
> +Zone America/Nassau -5:09:30 - LMT 1912 Mar 2
> + -5:00 Bahamas E%sT 1976
> + -5:00 US E%sT
> +
> +# Trinidad and Tobago
> +Zone America/Port_of_Spain -4:06:04 - LMT 1912 Mar 2
> + -4:00 - AST
> +
> +# Brazil
> +# Rio_Branco is too ambiguous, since there's a Rio Branco in Uruguay too.
> +Zone America/Porto_Acre -4:31:12 - LMT 1914
> + -5:00 Brazil AC%sT 1988 Sep 12
> + -5:00 - ACT
> +
> +# Argentina
> +# Santa Fe (SF), Entre Rios (ER), Corrientes (CN), Misiones (MN), Chaco (CC),
> +# Formosa (FM), La Pampa (LP), Chubut (CH)
> +Zone America/Rosario -4:02:40 - LMT 1894 Nov
> + -4:16:44 - CMT 1920 May
> + -4:00 - ART 1930 Dec
> + -4:00 Arg AR%sT 1969 Oct 5
> + -3:00 Arg AR%sT 1991 Jul
> + -3:00 - ART 1999 Oct 3 0:00
> + -4:00 Arg AR%sT 2000 Mar 3 0:00
> + -3:00 - ART
> +
> +# St Kitts-Nevis
> +Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre
> + -4:00 - AST
> +
> +# St Lucia
> +Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries
> + -4:04:00 - CMT 1912 # Castries Mean Time
> + -4:00 - AST
> +
> +# Virgin Is
> +Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie
> + -4:00 - AST
> +
> +# St Vincent and the Grenadines
> +Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
> + -4:04:56 - KMT 1912 # Kingstown Mean Time
> + -4:00 - AST
> +
> +# British Virgin Is
> +Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town
> + -4:00 - AST
> +
> +# McMurdo, Ross Island, since 1955-12
> +Zone Antarctica/McMurdo 0 - zzz 1956
> + 12:00 NZAQ NZ%sT
> +
> +# Japan
> +Zone Asia/Ishigaki 8:16:36 - LMT 1896
> + 8:00 - CST
> +
> +# Israel
> +Zone Asia/Tel_Aviv 2:19:04 - LMT 1880
> + 2:21 - JMT 1918
> + 2:00 Zion I%sT
> +
> +# Russia
> +Zone Asia/Tomsk 5:39:52 - LMT 1924 May 2
> + 6:00 - TSK 1957 Mar
> + 7:00 Russia TS%s 1991 Mar 31 2:00s
> + 6:00 1:00 TSD 1991 Sep 29 2:00s
> + 6:00 - TSK 1992 Jan 19 2:00s
> + 7:00 Russia TS%s
> +
> +# Svalbard & Jan Mayen
> +Zone Atlantic/Jan_Mayen -1:00 - EGT
> +
> +# Australia
> +Zone Australia/Canberra 9:56:32 - LMT 1895 Feb
> + 10:00 - EST 1917 Jan 1 0:01
> + 10:00 Aus EST 1971 Oct 31 2:00
> + 10:00 AN EST 1981 Oct 25 2:00
> + 10:00 1:00 EST 1982 Apr 4 3:00
> + 10:00 AN EST
> +
> +# UK
> +Zone Europe/Belfast -0:23:40 - LMT 1880 Aug 2
> + -0:25:21 - DMT 1916 May 21 2:00 # Dublin/Dunsink MT
> + -0:25:21 1:00 IST 1916 Oct 1 2:00s # Irish Summer Time
> + 0:00 GB-Eire %s 1968 Oct 27
> + 1:00 - BST 1971 Oct 31 2:00u
> + 0:00 GB-Eire %s 1996
> + 0:00 EU GMT/BST
> +
> +# Slovenia
> +Zone Europe/Ljubljana 0:58:04 - LMT 1884
> + 1:00 - CET 1941 Apr 18 23:00
> + 1:00 C-Eur CE%sT 1945 May 8 2:00s
> + 1:00 1:00 CEST 1945 Sep 16 2:00s
> + 1:00 - CET 1982 Nov 27
> + 1:00 EU CE%sT
> +
> +# Bosnia and Herzegovina
> +Zone Europe/Sarajevo 1:13:40 - LMT 1884
> + 1:00 - CET 1941 Apr 18 23:00
> + 1:00 C-Eur CE%sT 1945 May 8 2:00s
> + 1:00 1:00 CEST 1945 Sep 16 2:00s
> + 1:00 - CET 1982 Nov 27
> + 1:00 EU CE%sT
> +
> +# Macedonia
> +Zone Europe/Skopje 1:25:44 - LMT 1884
> + 1:00 - CET 1941 Apr 18 23:00
> + 1:00 C-Eur CE%sT 1945 May 8 2:00s
> + 1:00 1:00 CEST 1945 Sep 16 2:00s
> + 1:00 - CET 1982 Nov 27
> + 1:00 EU CE%sT
> +
> +# Moldova
> +Zone Europe/Tiraspol 1:58:32 - LMT 1880
> + 1:55 - CMT 1918 Feb 15 # Chisinau MT
> + 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
> + 2:00 Romania EE%sT 1940 Aug 15
> + 2:00 1:00 EEST 1941 Jul 17
> + 1:00 C-Eur CE%sT 1944 Aug 24
> + 3:00 Russia MSK/MSD 1991 Mar 31 2:00
> + 2:00 Russia EE%sT 1992 Jan 19 2:00
> + 3:00 Russia MSK/MSD
> +
> +# Croatia
> +# Zone NAME GMTOFF RULES FORMAT [UNTIL]
> +Zone Europe/Zagreb 1:03:52 - LMT 1884
> + 1:00 - CET 1941 Apr 18 23:00
> + 1:00 C-Eur CE%sT 1945 May 8 2:00s
> + 1:00 1:00 CEST 1945 Sep 16 2:00s
> + 1:00 - CET 1982 Nov 27
> + 1:00 EU CE%sT
More information about the tz
mailing list