proposed time zone package changes
Arthur David Olson
olsona at lecserver.nci.nih.gov
Wed Jan 14 18:51:31 UTC 2009
Here are proposed time zone package changes, preceded by a list of files
to be changed and reasons for the changes. If these pass muster,
tzcode2009a.tar.gz and tzdata2009a.tar.tz will appear a week from today
(on an unusual Wednesday since both Monday and Tuesday are leave days for
U. S. federal employees in the Washington, D. C. area).
--ado
* asia
change Katmandu to Kathmandu
* backward
provide Katmandu link
* europe
correct Swiss rules; add Europe/Geneva
* northamerica
clearer definition of Cuban transitions (no binary change)
Resolute changes abbreviation (but not time) twice a year
* strftime.c
c format warning fix
* tzselect.ksh
--help and --version handling
* zdump.c
--help and --version handling
* zic.c
--help and --version handling
fix infinite loop caused by overflow/optimization interaction
* zone.tab
Change Katmandu to Kathmandu
Change Resolute from Eastern Time to Eastern Standard Time
Add Europe/Geneva
diff -r -c old/asia new/asia
*** old/asia Wed Oct 8 08:35:57 2008
--- new/asia Wed Jan 14 11:15:49 2009
***************
*** 1,4 ****
! # @(#)asia 8.24
# <pre>
# This data is by no means authoritative; if you think you know better,
--- 1,4 ----
! # @(#)asia 8.25
# <pre>
# This data is by no means authoritative; if you think you know better,
***************
*** 1474,1480 ****
# Nepal
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
! Zone Asia/Katmandu 5:41:16 - LMT 1920
5:30 - IST 1986
5:45 - NPT # Nepal Time
--- 1474,1480 ----
# Nepal
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
! Zone Asia/Kathmandu 5:41:16 - LMT 1920
5:30 - IST 1986
5:45 - NPT # Nepal Time
diff -r -c old/backward new/backward
*** old/backward Tue Sep 9 22:33:26 2008
--- new/backward Wed Jan 14 11:15:49 2009
***************
*** 1,4 ****
! # @(#)backward 8.6
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
--- 1,4 ----
! # @(#)backward 8.7
# This file provides links between current names for time zones
# and their old names. Many names changed in late 1993.
***************
*** 24,29 ****
--- 24,30 ----
Link Asia/Ashgabat Asia/Ashkhabad
Link Asia/Chongqing Asia/Chungking
Link Asia/Dhaka Asia/Dacca
+ Link Asia/Kathmandu Asia/Katmandu
Link Asia/Kolkata Asia/Calcutta
Link Asia/Macau Asia/Macao
Link Asia/Jerusalem Asia/Tel_Aviv
diff -r -c old/europe new/europe
*** old/europe Tue Sep 9 22:33:25 2008
--- new/europe Wed Jan 14 13:37:27 2009
***************
*** 1,4 ****
! # @(#)europe 8.18
# <pre>
# This data is by no means authoritative; if you think you know better,
--- 1,4 ----
! # @(#)europe 8.19
# <pre>
# This data is by no means authoritative; if you think you know better,
***************
*** 2313,2328 ****
# mean time in preference to apparent time -- Geneva from 1780 ....
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# From Whitman (who writes ``Midnight?''):
! Rule Swiss 1940 only - Nov 2 0:00 1:00 S
! Rule Swiss 1940 only - Dec 31 0:00 0 -
# From Shanks & Pottenger:
! Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S
! Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12
0:29:44 - BMT 1894 Jun # Bern Mean Time
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
# Turkey
--- 2313,2384 ----
# mean time in preference to apparent time -- Geneva from 1780 ....
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
# From Whitman (who writes ``Midnight?''):
! # Rule Swiss 1940 only - Nov 2 0:00 1:00 S
! # Rule Swiss 1940 only - Dec 31 0:00 0 -
# From Shanks & Pottenger:
! # Rule Swiss 1941 1942 - May Sun>=1 2:00 1:00 S
! # Rule Swiss 1941 1942 - Oct Sun>=1 0:00 0 -
!
! # From Alois Treindl (2008-12-17):
! # I have researched the DST usage in Switzerland during the 1940ies.
! #
! # As I wrote in an earlier message, I suspected the current tzdata values
! # to be wrong. This is now verified.
! #
! # I have found copies of the original ruling by the Swiss Federal
! # government, in 'Eidgen[o]ssische Gesetzessammlung 1941 and 1942' (Swiss
! # federal law collection)...
! #
! # DST began on Monday 5 May 1941, 1:00 am by shifting the clocks to 2:00 am
! # DST ended on Monday 6 Oct 1941, 2:00 am by shifting the clocks to 1:00 am.
! #
! # DST began on Monday, 4 May 1942 at 01:00 am
! # DST ended on Monday, 5 Oct 1942 at 02:00 am
! #
! # There was no DST in 1940, I have checked the law collection carefully.
! # It is also indicated by the fact that the 1942 entry in the law
! # collection points back to 1941 as a reference, but no reference to any
! # other years are made.
! #
! # Newspaper articles I have read in the archives on 6 May 1941 reported
! # about the introduction of DST (Sommerzeit in German) during the previous
! # night as an absolute novelty, because this was the first time that such
! # a thing had happened in Switzerland.
! #
! # I have also checked 1916, because one book source (Gabriel, Traite de
! # l'heure dans le monde) claims that Switzerland had DST in 1916. This is
! # false, no official document could be found. Probably Gabriel got misled
! # by references to Germany, which introduced DST in 1916 for the first time.
! #
! # The tzdata rules for Switzerland must be changed to:
! # Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
! # Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
! #
! # The 1940 rules must be deleted.
! #
! # One further detail for Switzerland, which is probably out of scope for
! # most users of tzdata:
! # The zone file
! # Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12
! # 0:29:44 - BMT 1894 Jun #Bern Mean Time
! # 1:00 Swiss CE%sT 1981
! # 1:00 EU CE%sT
! # describes all of Switzerland correctly, with the exception of
! # the Cantone Geneve (Geneva, Genf). Between 1848 and 1894 Geneve did not
! # follow Bern Mean Time but kept its own local mean time.
! # To represent this, an extra zone would be needed.
!
! # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
! Rule Swiss 1941 1942 - May Mon>=1 1:00 1:00 S
! Rule Swiss 1941 1942 - Oct Mon>=1 2:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Zurich 0:34:08 - LMT 1848 Sep 12
0:29:44 - BMT 1894 Jun # Bern Mean Time
1:00 Swiss CE%sT 1981
1:00 EU CE%sT
+ Zone Europe/Geneva 0:24:56 - LMT 1894 Jun # avoid GMT
+ 1:00 Swiss CE%sT 1981
+ 1:00 EU CE%sT
# Turkey
diff -r -c old/northamerica new/northamerica
*** old/northamerica Tue Sep 9 16:05:43 2008
--- new/northamerica Wed Jan 14 12:32:15 2009
***************
*** 1,4 ****
! # @(#)northamerica 8.24
# <pre>
# also includes Central America and the Caribbean
--- 1,4 ----
! # @(#)northamerica 8.26
# <pre>
# also includes Central America and the Caribbean
***************
*** 1742,1751 ****
# The individual that answered the phone confirmed that the clocks did not
# move at the end of daylight saving on October 29/2006. He also told me that
# the clocks did not move this past weekend (March 11/2007)....
- #
- # America/Resolute should use the "Canada" Rule up to October 29/2006.
- # After that it should be fixed on Eastern Standard Time until further notice.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
Rule NT_YK 1918 only - Oct 27 2:00 0 S
--- 1742,1755 ----
# The individual that answered the phone confirmed that the clocks did not
# move at the end of daylight saving on October 29/2006. He also told me that
# the clocks did not move this past weekend (March 11/2007)....
+ # From Chris Walton (2008-11-13):
+ # ...the residents of Resolute believe that they are changing "time zones"
+ # twice a year. In winter months, local time is qualified with "Eastern
+ # Time" which is really "Eastern Standard Time (UTC-5)". In summer
+ # months, local time is qualified with "Central Time" which is really
+ # "Central Daylight Time (UTC-5)"...
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule NT_YK 1918 only - Apr 14 2:00 1:00 D
Rule NT_YK 1918 only - Oct 27 2:00 0 S
***************
*** 1772,1782 ****
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# aka Qausuittuq
Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT 2006 Oct 29 2:00
! -5:00 - EST
# aka Kangiqiniq
Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
--- 1776,1789 ----
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# aka Qausuittuq
+ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+ Rule Resolute 2006 max - Nov Sun>=1 2:00 0 ES
+ Rule Resolute 2007 max - Mar Sun>=8 2:00 0 CD
Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT 2006 Oct 29 2:00
! -5:00 Resolute %sT
# aka Kangiqiniq
Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
***************
*** 2280,2286 ****
Rule Cuba 1997 only - Oct 12 0:00s 0 S
Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
! Rule Cuba 2000 2006 - Apr Sun>=1 0:00s 1:00 D
Rule Cuba 2006 max - Oct lastSun 0:00s 0 S
Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
Rule Cuba 2008 max - Mar Sun>=15 0:00s 1:00 D
--- 2287,2293 ----
Rule Cuba 1997 only - Oct 12 0:00s 0 S
Rule Cuba 1998 1999 - Mar lastSun 0:00s 1:00 D
Rule Cuba 1998 2003 - Oct lastSun 0:00s 0 S
! Rule Cuba 2000 2004 - Apr Sun>=1 0:00s 1:00 D
Rule Cuba 2006 max - Oct lastSun 0:00s 0 S
Rule Cuba 2007 only - Mar Sun>=8 0:00s 1:00 D
Rule Cuba 2008 max - Mar Sun>=15 0:00s 1:00 D
diff -r -c old/strftime.c new/strftime.c
*** old/strftime.c Mon Sep 15 09:24:42 2008
--- new/strftime.c Wed Jan 14 12:33:56 2009
***************
*** 1,6 ****
#ifndef lint
#ifndef NOID
! static char elsieid[] = "@(#)strftime.c 8.2";
/*
** Based on the UCB version with the ID appearing below.
** This is ANSIish only when "multibyte character == plain character".
--- 1,6 ----
#ifndef lint
#ifndef NOID
! static char elsieid[] = "@(#)strftime.c 8.3";
/*
** Based on the UCB version with the ID appearing below.
** This is ANSIish only when "multibyte character == plain character".
***************
*** 216,222 ****
{
int warn2 = IN_SOME;
! pt = _fmt(Locale->c_fmt, t, pt, ptlim, warnp);
if (warn2 == IN_ALL)
warn2 = IN_THIS;
if (warn2 > *warnp)
--- 216,222 ----
{
int warn2 = IN_SOME;
! pt = _fmt(Locale->c_fmt, t, pt, ptlim, &warn2);
if (warn2 == IN_ALL)
warn2 = IN_THIS;
if (warn2 > *warnp)
diff -r -c old/tzselect.ksh new/tzselect.ksh
*** old/tzselect.ksh Tue Sep 9 22:33:17 2008
--- new/tzselect.ksh Wed Jan 14 10:56:24 2009
***************
*** 1,6 ****
#! /bin/ksh
! # '@(#)tzselect.ksh 8.1'
# Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin.
--- 1,6 ----
#! /bin/ksh
! VERSION='@(#)tzselect.ksh 8.2'
# Ask the user about the time zone, and output the resulting TZ value to stdout.
# Interact with the user via stderr and stdin.
***************
*** 45,50 ****
--- 45,65 ----
exit 1
}
+ if [ "$1" = "--help" ]; then
+ cat <<EOF
+ Usage: tzselect
+ Select a time zone interactively.
+
+ Report bugs to tz at elsie.nci.nih.gov.
+ EOF
+ exit 0
+ elif [ "$1" = "--version" ]; then
+ cat <<EOF
+ tzselect $VERSION
+ EOF
+ exit 0
+ fi
+
# Make sure the tables are readable.
TZ_COUNTRY_TABLE=$TZDIR/iso3166.tab
TZ_ZONE_TABLE=$TZDIR/zone.tab
diff -r -c old/zdump.c new/zdump.c
*** old/zdump.c Tue Sep 9 22:33:24 2008
--- new/zdump.c Wed Jan 14 11:01:56 2009
***************
*** 1,4 ****
! static char elsieid[] = "@(#)zdump.c 8.6";
/*
** This code has been made independent of the rest of the time
--- 1,4 ----
! static char elsieid[] = "@(#)zdump.c 8.8";
/*
** This code has been made independent of the rest of the time
***************
*** 230,235 ****
--- 230,246 ----
warned = TRUE;
}
+ static void
+ usage(const char *progname, FILE *stream, int status)
+ {
+ (void) fprintf(stream,
+ _("%s: usage is %s [ --version ] [ --help ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n\
+ \n\
+ Report bugs to tz at elsie.nci.nih.gov.\n"),
+ progname, progname);
+ exit(status);
+ }
+
int
main(argc, argv)
int argc;
***************
*** 266,271 ****
--- 277,284 ----
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
exit(EXIT_SUCCESS);
+ } else if (strcmp(argv[i], "--help") == 0) {
+ usage(progname, stdout, EXIT_SUCCESS);
}
vflag = 0;
cutarg = NULL;
***************
*** 275,284 ****
else cutarg = optarg;
if ((c != EOF && c != -1) ||
(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
! (void) fprintf(stderr,
! _("%s: usage is %s [ --version ] [ -v ] [ -c [loyear,]hiyear ] zonename ...\n"),
! progname, progname);
! exit(EXIT_FAILURE);
}
if (vflag) {
if (cutarg != NULL) {
--- 288,294 ----
else cutarg = optarg;
if ((c != EOF && c != -1) ||
(optind == argc - 1 && strcmp(argv[optind], "=") == 0)) {
! usage(progname, stderr, EXIT_FAILURE);
}
if (vflag) {
if (cutarg != NULL) {
***************
*** 349,361 ****
(void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
}
for ( ; ; ) {
! if (t >= cuthitime)
break;
newt = t + SECSPERHOUR * 12;
- if (newt >= cuthitime)
- break;
- if (newt <= t)
- break;
newtmp = localtime(&newt);
if (newtmp != NULL)
newtm = *newtmp;
--- 359,367 ----
(void) strncpy(buf, abbr(&tm), (sizeof buf) - 1);
}
for ( ; ; ) {
! if (t >= cuthitime || t >= cuthitime - SECSPERHOUR * 12)
break;
newt = t + SECSPERHOUR * 12;
newtmp = localtime(&newt);
if (newtmp != NULL)
newtm = *newtmp;
diff -r -c old/zic.c new/zic.c
*** old/zic.c Tue Sep 9 22:33:18 2008
--- new/zic.c Wed Jan 14 10:59:48 2009
***************
*** 3,9 ****
** 2006-07-17 by Arthur David Olson.
*/
! static char elsieid[] = "@(#)zic.c 8.17";
#include "private.h"
#include "locale.h"
--- 3,9 ----
** 2006-07-17 by Arthur David Olson.
*/
! static char elsieid[] = "@(#)zic.c 8.18";
#include "private.h"
#include "locale.h"
***************
*** 156,162 ****
const struct zone * zp, int ntzones);
static void setboundaries(void);
static zic_t tadd(zic_t t1, long t2);
! static void usage(void);
static void writezone(const char * name, const char * string);
static int yearistype(int year, const char * type);
--- 156,162 ----
const struct zone * zp, int ntzones);
static void setboundaries(void);
static zic_t tadd(zic_t t1, long t2);
! static void usage(FILE *stream, int status);
static void writezone(const char * name, const char * string);
static int yearistype(int year, const char * type);
***************
*** 454,466 ****
}
static void
! usage(void)
{
! (void) fprintf(stderr, _("%s: usage is %s \
! [ --version ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
! \t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n"),
! progname, progname);
! exit(EXIT_FAILURE);
}
static const char * psxrules;
--- 454,468 ----
}
static void
! usage(FILE *stream, int status)
{
! (void) fprintf(stream, _("%s: usage is %s \
! [ --version ] [ --help ] [ -v ] [ -l localtime ] [ -p posixrules ] \\\n\
! \t[ -d directory ] [ -L leapseconds ] [ -y yearistype ] [ filename ... ]\n\
! \n\
! Report bugs to tz at elsie.nci.nih.gov.\n"),
! progname, progname);
! exit(status);
}
static const char * psxrules;
***************
*** 498,508 ****
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
exit(EXIT_SUCCESS);
}
while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
switch (c) {
default:
! usage();
case 'd':
if (directory == NULL)
directory = optarg;
--- 500,512 ----
if (strcmp(argv[i], "--version") == 0) {
(void) printf("%s\n", elsieid);
exit(EXIT_SUCCESS);
+ } else if (strcmp(argv[i], "--help") == 0) {
+ usage(stdout, EXIT_SUCCESS);
}
while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF && c != -1)
switch (c) {
default:
! usage(stderr, EXIT_FAILURE);
case 'd':
if (directory == NULL)
directory = optarg;
***************
*** 561,567 ****
break;
}
if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
! usage(); /* usage message by request */
if (directory == NULL)
directory = TZDIR;
if (yitcommand == NULL)
--- 565,571 ----
break;
}
if (optind == argc - 1 && strcmp(argv[optind], "=") == 0)
! usage(stderr, EXIT_FAILURE); /* usage message by request */
if (directory == NULL)
directory = TZDIR;
if (yitcommand == NULL)
diff -r -c old/zone.tab new/zone.tab
*** old/zone.tab Tue Oct 21 12:10:25 2008
--- new/zone.tab Wed Jan 14 13:40:29 2009
***************
*** 1,4 ****
! # @(#)zone.tab 8.21
#
# TZ zone descriptions
#
--- 1,4 ----
! # @(#)zone.tab 8.25
#
# TZ zone descriptions
#
***************
*** 116,122 ****
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
! CA +744144-0944945 America/Resolute Eastern Time - Resolute, Nunavut
CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
--- 116,122 ----
CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
! CA +744144-0944945 America/Resolute Eastern Standard Time - Resolute, Nunavut
CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
***************
*** 136,142 ****
CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo
CF +0422+01835 Africa/Bangui
CG -0416+01517 Africa/Brazzaville
! CH +4723+00832 Europe/Zurich
CI +0519-00402 Africa/Abidjan
CK -2114-15946 Pacific/Rarotonga
CL -3327-07040 America/Santiago most locations
--- 136,143 ----
CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo
CF +0422+01835 Africa/Bangui
CG -0416+01517 Africa/Brazzaville
! CH +4723+00832 Europe/Zurich most locations
! CH +4614+00604 Europe/Geneva Geneva only
CI +0519-00402 Africa/Abidjan
CK -2114-15946 Pacific/Rarotonga
CL -3327-07040 America/Santiago most locations
***************
*** 292,298 ****
NI +1209-08617 America/Managua
NL +5222+00454 Europe/Amsterdam
NO +5955+01045 Europe/Oslo
! NP +2743+08519 Asia/Katmandu
NR -0031+16655 Pacific/Nauru
NU -1901-16955 Pacific/Niue
NZ -3652+17446 Pacific/Auckland most locations
--- 293,299 ----
NI +1209-08617 America/Managua
NL +5222+00454 Europe/Amsterdam
NO +5955+01045 Europe/Oslo
! NP +2743+08519 Asia/Kathmandu
NR -0031+16655 Pacific/Nauru
NU -1901-16955 Pacific/Niue
NZ -3652+17446 Pacific/Auckland most locations
More information about the tz
mailing list