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