[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