I object to adding Geneva.
The rule has always been to only add new IDs when they are distinct after Jan 1, 1970. This does not appear to meet that criterion. As a matter of fact, not so long ago some IDs were dropped precisely because they did not meet that criterion.
(If we added any and all IDs without a cutoff date, we would have a disastrous blowup in the number of IDs.)
Mark
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@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@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@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