[tz] zdump bug in Asia/Singapore

Tim Parenti tim at timtimeonline.com
Sat Sep 6 22:54:44 UTC 2014


While sorting out some issues for tzdist, I noticed a bug in zdump, 
which is still present in 2014g.

Running zdump on Asia/Singapore for both 1981 and 1982 together produces 
the expected transition from UTC+7:30 to UTC+8 at the boundary between 
those years:

$ ./zdump.exe -vc 1981,1983 Asia/Singapore
Asia/Singapore  -9223372036854775808 = NULL
Asia/Singapore  -9223372036854689408 = NULL
Asia/Singapore  Thu Dec 31 16:29:59 1981 UT = Thu Dec 31 23:59:59 1981 
SGT isdst=0
Asia/Singapore  Thu Dec 31 16:30:00 1981 UT = Fri Jan  1 00:30:00 1982 
SGT isdst=0
Asia/Singapore  9223372036854689407 = NULL
Asia/Singapore  9223372036854775807 = NULL

However, running it on 1981 and 1982 individually does not:

$ ./zdump.exe -vc 1981,1982 Asia/Singapore
Asia/Singapore  -9223372036854775808 = NULL
Asia/Singapore  -9223372036854689408 = NULL
Asia/Singapore  9223372036854689407 = NULL
Asia/Singapore  9223372036854775807 = NULL

$ ./zdump.exe -vc 1982,1983 Asia/Singapore
Asia/Singapore  -9223372036854775808 = NULL
Asia/Singapore  -9223372036854689408 = NULL
Asia/Singapore  9223372036854689407 = NULL
Asia/Singapore  9223372036854775807 = NULL

Initially, I thought this might have to do with the fact that the 
transition is specified as a Zone continuation line rather than as a 
Rule, since zdump properly handled my extended edge-case examples to Jon 
Skeet a while back:
http://mm.icann.org/pipermail/tz/2014-July/021162.html 
<http://mm.icann.org/pipermail/tz/2014-July/021162.html>

zdump also properly handles Asia/Dhaka's DST transition at the end of 
2009, but fails in some other similar cases.

So it looks like it's more to do with the transition taking place too 
close to the year boundary.  Part of the problem may be the transition 
happening in different years, UTC and local, but that doesn't seem to be 
all that's going on.

Attached are some test cases to run against various versions of 
Singapore with 1981,1982 and 1982,1983; and various versions of Dhaka 
with 2009,2010 and 2010,2011.  All of these should work, but most 
currently don't.  (The ones that do are marked.)

-- 
Tim Parenti

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mm.icann.org/pipermail/tz/attachments/20140906/104752f8/attachment-0001.html>
-------------- next part --------------
# The real Asia/Singapore zone.
#
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Asia/Singapore	6:55:25 -	LMT	1901 Jan  1
			6:55:25	-	SMT	1905 Jun  1 # Singapore M.T.
			7:00	-	MALT	1933 Jan  1 # Malaya Time
			7:00	0:20	MALST	1936 Jan  1
			7:20	-	MALT	1941 Sep  1
			7:30	-	MALT	1942 Feb 16
			9:00	-	JST	1945 Sep 12
			7:30	-	MALT	1965 Aug  9 # independence
			7:30	-	SGT	1982 Jan  1 # Singapore Time
			8:00	-	SGT


# Some test cases for zdump.
# Each of these should result in a transition in either 1981 or 1982.
# That is, a transition should appear either with
#   zdump -vc 1981,1982 ZONE_NAME
# or with
#   zdump -vc 1982,1983 ZONE_NAME
#
Zone	Test/Singapore/Unspecified	7:30	-	SGT	1982 Jan  1
			8:00	-	SGT

Zone	Test/Singapore/2359utc	7:30	-	SGT	1981 Dec 31 23:59u
			8:00	-	SGT
Zone	Test/Singapore/2400utc	7:30	-	SGT	1981 Dec 31 24:00u
			8:00	-	SGT
Zone	Test/Singapore/0000utc	7:30	-	SGT	1982 Jan  1  0:00u
			8:00	-	SGT
Zone	Test/Singapore/0001utc	7:30	-	SGT	1982 Jan  1  0:01u	# Works
			8:00	-	SGT

Zone	Test/Singapore/2359wall	7:30	-	SGT	1981 Dec 31 23:59
			8:00	-	SGT
Zone	Test/Singapore/2400wall	7:30	-	SGT	1981 Dec 31 24:00
			8:00	-	SGT
Zone	Test/Singapore/0000wall	7:30	-	SGT	1982 Jan  1  0:00
			8:00	-	SGT
Zone	Test/Singapore/0001wall	7:30	-	SGT	1982 Jan  1  0:01
			8:00	-	SGT

Zone	Test/Singapore/2359wall_as_utc	7:30	-	SGT	1981 Dec 31 16:29u
			8:00	-	SGT
Zone	Test/Singapore/0000wall_as_utc	7:30	-	SGT	1981 Dec 31 16:30u
			8:00	-	SGT
Zone	Test/Singapore/0001wall_as_utc	7:30	-	SGT	1981 Dec 31 16:31u
			8:00	-	SGT

Zone	Test/Singapore/Something_Else	7:30	-	SGT	1981 Dec 31 19:45u
			8:00	-	SGT

################################################################################

# The real Asia/Dhaka zone.
#
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	Dhaka	2009	only	-	Jun	19	23:00	1:00	S
Rule	Dhaka	2009	only	-	Dec	31	24:00	0	-
# Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
Zone	Asia/Dhaka	6:01:40 -	LMT	1890
			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
			6:30	-	BURT	1942 May 15 # Burma Time
			5:30	-	IST	1942 Sep
			6:30	-	BURT	1951 Sep 30
			6:00	-	DACT	1971 Mar 26 # Dacca Time
			6:00	-	BDT	2009
			6:00	Dhaka	BD%sT


# Some test cases for zdump.
# Each of these should result in a transition in either 2009 or 2010.
# That is, a Dec 2009 or Jan 2010 transition should appear either with
#   zdump -vc 2009,2010 ZONE_NAME
# or with
#   zdump -vc 2010,2011 ZONE_NAME
#
# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
Rule	2359utc	2009	only	-	Jun	19	23:00u	1:00	S
Rule	2359utc	2009	only	-	Dec	31	23:59u	0	-
Zone	Test/Dhaka/2359utc	6:00	2359utc	BD%sT
Rule	2400utc	2009	only	-	Jun	19	23:00u	1:00	S
Rule	2400utc	2009	only	-	Dec	31	24:00u	0	-
Zone	Test/Dhaka/2400utc	6:00	2400utc	BD%sT
Rule	0000utc	2009	only	-	Jun	19	23:00u	1:00	S
Rule	0000utc	2010	only	-	Jan	 1	 0:00u	0	-
Zone	Test/Dhaka/0000utc	6:00	0000utc	BD%sT
Rule	0001utc	2009	only	-	Jun	19	23:00u	1:00	S
Rule	0001utc	2010	only	-	Jan	 1	 0:01u	0	-
Zone	Test/Dhaka/0001utc	6:00	0001utc	BD%sT	# Works

Rule	2359wall	2009	only	-	Jun	19	23:00	1:00	S
Rule	2359wall	2009	only	-	Dec	31	23:59	0	-
Zone	Test/Dhaka/2359wall	6:00	2359wall	BD%sT	# Works
Rule	2400wall	2009	only	-	Jun	19	23:00	1:00	S
Rule	2400wall	2009	only	-	Dec	31	24:00	0	-
Zone	Test/Dhaka/2400wall	6:00	2400wall	BD%sT	# Works
Rule	0000wall	2009	only	-	Jun	19	23:00	1:00	S
Rule	0000wall	2010	only	-	Jan	 1	 0:00	0	-
Zone	Test/Dhaka/0000wall	6:00	0000wall	BD%sT	# Works
Rule	0001wall	2009	only	-	Jun	19	23:00	1:00	S
Rule	0001wall	2010	only	-	Jan	 1	 0:01	0	-
Zone	Test/Dhaka/0001wall	6:00	0001wall	BD%sT

Rule	2359wall_as_utc	2009	only	-	Jun	19	17:00u	1:00	S
Rule	2359wall_as_utc	2009	only	-	Dec	31	16:59u	0	-
Zone	Test/Dhaka/2359wall_as_utc	6:00	2359wall_as_utc	BD%sT	# Works
Rule	0000wall_as_utc	2009	only	-	Jun	19	17:00u	1:00	S
Rule	0000wall_as_utc	2009	only	-	Dec	31	17:00u	0	-
Zone	Test/Dhaka/0000wall_as_utc	6:00	0000wall_as_utc	BD%sT	# Works
Rule	0001wall_as_utc	2009	only	-	Jun	19	17:00u	1:00	S
Rule	0001wall_as_utc	2009	only	-	Dec	31	17:01u	0	-
Zone	Test/Dhaka/0001wall_as_utc	6:00	0001wall_as_utc	BD%sT

Rule	Something_Else	2009	only	-	Jun	19	17:00u	1:00	S
Rule	Something_Else	2009	only	-	Dec	31	19:45u	0	-
Zone	Test/Dhaka/Something_Else	6:00	Something_Else	BD%sT


More information about the tz mailing list