Hello community, here is the log from the commit of package timezone for openSUSE:Factory checked in at 2015-07-05 17:50:00 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/timezone (Old) and /work/SRC/openSUSE:Factory/.timezone.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "timezone" Changes: -------- --- /work/SRC/openSUSE:Factory/timezone/timezone-java.changes 2015-05-22 16:26:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.timezone.new/timezone-java.changes 2015-07-05 17:50:01.000000000 +0200 @@ -1,0 +2,10 @@ +Sun Jun 14 15:22:29 UTC 2015 - [email protected] + +- timezone update 2015e [boo#934654] + * Morocco will suspend DST from 2015-06-14 03:00 through + 2015-07-19 02:00, not 06-13 and 07-18 as guessed. + * Assume Cayman Islands will observe DST starting next year, + using US rules. + * The file 'iso3166.tab' now uses UTF-8 + +------------------------------------------------------------------- --- /work/SRC/openSUSE:Factory/timezone/timezone.changes 2015-05-22 16:26:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.timezone.new/timezone.changes 2015-07-05 17:50:02.000000000 +0200 @@ -1,0 +2,17 @@ +Sun Jun 14 15:32:39 UTC 2015 - [email protected] + +- timezone update 2015e [boo#934654] + * Morocco will suspend DST from 2015-06-14 03:00 through + 2015-07-19 02:00, not 06-13 and 07-18 as guessed. + * Assume Cayman Islands will observe DST starting next year, + using US rules. + * The file 'iso3166.tab' now uses UTF-8 + * When displaying data, tzselect converts it to the current + locale's encoding if the iconv command works. + * tzselect no longer mishandles Dominica, fixing a bug introduced + in Release 2014f. + * zic -l no longer fails when compiled with + -DTZDEFAULT=\"/etc/localtime\", regression from 2014f. + Dropping upstreamed tzcode-zic-empty-comp.diff + +------------------------------------------------------------------- Old: ---- tzcode-zic-empty-comp.diff tzcode2015d.tar.gz tzcode2015d.tar.gz.asc tzdata2015d.tar.gz tzdata2015d.tar.gz.asc New: ---- tzcode2015e.tar.gz tzcode2015e.tar.gz.asc tzdata2015e.tar.gz tzdata2015e.tar.gz.asc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ timezone-java.spec ++++++ --- /var/tmp/diff_new_pack.TIpkdZ/_old 2015-07-05 17:50:03.000000000 +0200 +++ /var/tmp/diff_new_pack.TIpkdZ/_new 2015-07-05 17:50:03.000000000 +0200 @@ -25,7 +25,7 @@ Group: System/Base # COMMON-BEGIN # COMMON-BEGIN -Version: 2015d +Version: 2015e Release: 0 Source: ftp://ftp.iana.org/tz/releases/tzdata%{version}.tar.gz Source1: ftp://ftp.iana.org/tz/releases/tzcode%{version}.tar.gz @@ -40,7 +40,6 @@ Patch3: iso3166-uk.diff Patch4: tzcode-link.diff Patch5: tzcode-symlink.patch -Patch6: tzcode-zic-empty-comp.diff # COMMON-END # COMMON-END Url: http://www.gnu.org/software/libc/libc.html @@ -64,7 +63,6 @@ %patch1 -p1 %patch2 -p1 %patch3 -p1 -%patch6 -p1 %if 0%{?suse_version} < 1220 %patch4 -p1 %else ++++++ timezone.spec ++++++ --- /var/tmp/diff_new_pack.TIpkdZ/_old 2015-07-05 17:50:03.000000000 +0200 +++ /var/tmp/diff_new_pack.TIpkdZ/_new 2015-07-05 17:50:03.000000000 +0200 @@ -23,7 +23,7 @@ Url: http://www.iana.org/time-zones PreReq: filesystem, coreutils # COMMON-BEGIN -Version: 2015d +Version: 2015e Release: 0 Source: ftp://ftp.iana.org/tz/releases/tzdata%{version}.tar.gz Source1: ftp://ftp.iana.org/tz/releases/tzcode%{version}.tar.gz @@ -38,7 +38,6 @@ Patch3: iso3166-uk.diff Patch4: tzcode-link.diff Patch5: tzcode-symlink.patch -Patch6: tzcode-zic-empty-comp.diff # COMMON-END BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -58,7 +57,6 @@ %patch1 -p1 %patch2 -p1 %patch3 -p1 -%patch6 -p1 %if 0%{?suse_version} < 1220 %patch4 -p1 %else ++++++ tzcode2015d.tar.gz -> tzcode2015e.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Makefile new/Makefile --- old/Makefile 2015-04-24 17:11:35.000000000 +0200 +++ new/Makefile 2015-06-13 19:57:13.000000000 +0200 @@ -5,7 +5,7 @@ PACKAGE= tzcode # Version numbers of the code and data distributions. -VERSION= 2015d +VERSION= 2015e # Email address for bug reports. BUGEMAIL= [email protected] @@ -292,23 +292,24 @@ SAFE_CHARSET1= $(TAB_CHAR)' !\"'$$sharp'$$%&'\''()*+,./0123456789:;<=>?@' SAFE_CHARSET2= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`' SAFE_CHARSET3= 'abcdefghijklmnopqrstuvwxyz{|}~' -SAFE_CHARSET= ]$(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3)- -SAFE_CHAR= '['$(SAFE_CHARSET)']' -# NONSYM_CHAR is a regular expression that matches any character -# except for a small number of symbols, where we prefer to stick with +SAFE_CHARSET= $(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3) +SAFE_CHAR= '[]'$(SAFE_CHARSET)'-]' + +# OK_CHAR matches any character allowed in the distributed files. +# This is the same as SAFE_CHAR, except that multibyte letters are +# also allowed so that commentary can contain people's names and quote +# non-English sources. For non-letters the sources are limited to # ASCII renderings for the convenience of maintainers whose text editors # mishandle UTF-8 by default (e.g., XEmacs 21.4.22). -NONSYM_CHAR= '[^–—°′″≈≠≤≥±−×÷∞←→↔·•§¶«»‘’‚‛“”„‟‹›「」『』〝〞〟]' +OK_CHAR= '[][:alpha:]'$(SAFE_CHARSET)'-]' # SAFE_LINE matches a line of safe characters. -# SAFE_SHARP_LINE is similar, except any character can follow '#'; +# SAFE_SHARP_LINE is similar, except any OK character can follow '#'; # this is so that comments can contain non-ASCII characters. -# NONSYM_LINE matches a line of non-symbols. -# VALID_LINE matches a line of any validly-encoded characters. +# OK_LINE matches a line of OK characters. SAFE_LINE= '^'$(SAFE_CHAR)'*$$' -SAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(NONSYM_CHAR)'*)?$$' -NONSYM_LINE= '^'$(NONSYM_CHAR)'*$$' -VALID_LINE= '^.*$$' +SAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(OK_CHAR)'*)?$$' +OK_LINE= '^'$(OK_CHAR)'*$$' # Flags to give 'tar' when making a distribution. # Try to use flags appropriate for GNU tar. @@ -323,6 +324,8 @@ ############################################################################### +#MAKE= make + cc= cc CC= $(cc) -DTZDIR=\"$(TZDIR)\" @@ -371,7 +374,7 @@ all: tzselect zic zdump libtz.a $(TABDATA) -ALL: all date +ALL: all date $(ENCHILADA) install: all $(DATA) $(REDO) $(MANS) mkdir -p $(DESTDIR)$(ETCDIR) $(DESTDIR)$(TZDIR) \ @@ -475,14 +478,11 @@ check_character_set: $(ENCHILADA) LC_ALL=en_US.utf8 && export LC_ALL && \ sharp='#' && \ - ! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \ + ! grep -Env $(SAFE_LINE) Makefile $(MANS) date.1 $(MANTXTS) \ $(MISC) $(SOURCES) $(WEB_PAGES) && \ ! grep -Env $(SAFE_SHARP_LINE) $(TDATA) backzone \ - iso3166.tab leapseconds yearistype.sh zone.tab && \ - test $$(grep -Ecv $(SAFE_SHARP_LINE) Makefile) -eq 1 && \ - ! grep -Env $(NONSYM_LINE) CONTRIBUTING NEWS README Theory \ - $(MANS) date.1 zone1970.tab && \ - ! grep -Env $(VALID_LINE) $(ENCHILADA) + leapseconds yearistype.sh zone.tab && \ + ! grep -Env $(OK_LINE) $(ENCHILADA) check_white_space: $(ENCHILADA) ! grep -En ' '$(TAB_CHAR)"|$$(printf '[\f\r\v]')" $(ENCHILADA) @@ -573,9 +573,9 @@ # The zics below ensure that each data file can stand on its own. # We also do an all-files run to catch links to links. -check_public: $(ENCHILADA) - make maintainer-clean - make "CFLAGS=$(GCC_DEBUG_FLAGS)" $(ENCHILADA) all +check_public: + $(MAKE) maintainer-clean + $(MAKE) "CFLAGS=$(GCC_DEBUG_FLAGS)" ALL mkdir tzpublic for i in $(TDATA) ; do \ $(zic) -v -d tzpublic $$i 2>&1 || exit; \ @@ -594,8 +594,8 @@ zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \ for type in $(TIME_T_ALTERNATIVES); do \ mkdir -p tzpublic/$$type && \ - make clean_misc && \ - make TOPDIR=`pwd`/tzpublic/$$type \ + $(MAKE) clean_misc && \ + $(MAKE) TOPDIR=`pwd`/tzpublic/$$type \ CFLAGS='$(CFLAGS) -Dtime_tz='"'$$type'" \ REDO='$(REDO)' \ install && \ @@ -641,12 +641,12 @@ gpg --armor --detach-sign $? typecheck: - make clean + $(MAKE) clean for i in "long long" unsigned; \ do \ - make CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \ + $(MAKE) CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \ ./zdump -v Europe/Rome ; \ - make clean ; \ + $(MAKE) clean ; \ done zonenames: $(TDATA) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/NEWS new/NEWS --- old/NEWS 2015-04-24 17:11:35.000000000 +0200 +++ new/NEWS 2015-06-13 19:57:13.000000000 +0200 @@ -1,5 +1,34 @@ News for the tz database + +Release 2015e - 2015-06-13 10:56:02 -0700 + + Changes affecting future time stamps + + Morocco will suspend DST from 2015-06-14 03:00 through 2015-07-19 02:00, + not 06-13 and 07-18 as we had guessed. (Thanks to Milamber.) + + Assume Cayman Islands will observe DST starting next year, using US rules. + Although it isn't guaranteed, it is the most likely. + + Changes affecting data format + + The file 'iso3166.tab' now uses UTF-8, so that its entries can better + spell the names of Åland Islands, Côte d'Ivoire, and Réunion. + + Changes affecting code + + When displaying data, tzselect converts it to the current locale's + encoding if the iconv command works. (Problem reported by random832.) + + tzselect no longer mishandles Dominica, fixing a bug introduced + in Release 2014f. (Problem reported by Owen Leibman.) + + zic -l no longer fails when compiled with -DTZDEFAULT=\"/etc/localtime\". + This fixes a bug introduced in Release 2014f. + (Problem reported by Leonardo Chiquitto.) + + Release 2015d - 2015-04-24 08:09:46 -0700 Changes affecting future time stamps diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/localtime.c new/localtime.c --- old/localtime.c 2015-03-10 17:37:50.000000000 +0100 +++ new/localtime.c 2015-05-08 23:47:40.000000000 +0200 @@ -216,22 +216,44 @@ { register int_fast32_t result; register int i; + int_fast32_t one = 1; + int_fast32_t halfmaxval = one << (32 - 2); + int_fast32_t maxval = halfmaxval - 1 + halfmaxval; + int_fast32_t minval = -1 - maxval; - result = (codep[0] & 0x80) ? -1 : 0; - for (i = 0; i < 4; ++i) + result = codep[0] & 0x7f; + for (i = 1; i < 4; ++i) result = (result << 8) | (codep[i] & 0xff); + + if (codep[0] & 0x80) { + /* Do two's-complement negation even on non-two's-complement machines. + If the result would be minval - 1, return minval. */ + result -= !TWOS_COMPLEMENT(int_fast32_t) && result != 0; + result += minval; + } return result; } static int_fast64_t detzcode64(const char *const codep) { - register int_fast64_t result; + register uint_fast64_t result; register int i; + int_fast64_t one = 1; + int_fast64_t halfmaxval = one << (64 - 2); + int_fast64_t maxval = halfmaxval - 1 + halfmaxval; + int_fast64_t minval = -TWOS_COMPLEMENT(int_fast64_t) - maxval; - result = (codep[0] & 0x80) ? -1 : 0; - for (i = 0; i < 8; ++i) + result = codep[0] & 0x7f; + for (i = 1; i < 8; ++i) result = (result << 8) | (codep[i] & 0xff); + + if (codep[0] & 0x80) { + /* Do two's-complement negation even on non-two's-complement machines. + If the result would be minval - 1, return minval. */ + result -= !TWOS_COMPLEMENT(int_fast64_t) && result != 0; + result += minval; + } return result; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/private.h new/private.h --- old/private.h 2015-04-20 08:12:58.000000000 +0200 +++ new/private.h 2015-05-08 23:47:40.000000000 +0200 @@ -472,15 +472,20 @@ #define TYPE_SIGNED(type) (((type) -1) < 0) #endif /* !defined TYPE_SIGNED */ -/* The minimum and maximum finite time values. */ -static time_t const time_t_min = - (TYPE_SIGNED(time_t) - ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1) - : 0); -static time_t const time_t_max = - (TYPE_SIGNED(time_t) - ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)) - : -1); +#define TWOS_COMPLEMENT(t) ((t) ~ (t) 0 < 0) + +/* Max and min values of the integer type T, of which only the bottom + B bits are used, and where the highest-order used bit is considered + to be a sign bit if T is signed. */ +#define MAXVAL(t, b) \ + ((t) (((t) 1 << ((b) - 1 - TYPE_SIGNED(t))) \ + - 1 + ((t) 1 << ((b) - 1 - TYPE_SIGNED(t))))) +#define MINVAL(t, b) \ + ((t) (TYPE_SIGNED(t) ? - TWOS_COMPLEMENT(t) - MAXVAL(t, b) : 0)) + +/* The minimum and maximum finite time values. This assumes no padding. */ +static time_t const time_t_min = MINVAL(time_t, TYPE_BIT(time_t)); +static time_t const time_t_max = MAXVAL(time_t, TYPE_BIT(time_t)); #ifndef INT_STRLEN_MAXIMUM /* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/tzselect.ksh new/tzselect.ksh --- old/tzselect.ksh 2014-11-26 20:34:32.000000000 +0100 +++ new/tzselect.ksh 2015-05-27 19:11:50.000000000 +0200 @@ -37,10 +37,16 @@ : ${AWK=awk} : ${TZDIR=`pwd`} +# Output one argument as-is to standard output. +# Safer than 'echo', which can mishandle '\' or leading '-'. +say() { + printf '%s\n' "$1" +} + # Check for awk Posix compliance. ($AWK -v x=y 'BEGIN { exit 123 }') </dev/null >/dev/null 2>&1 [ $? = 123 ] || { - echo >&2 "$0: Sorry, your '$AWK' program is not Posix compatible." + say >&2 "$0: Sorry, your '$AWK' program is not Posix compatible." exit 1 } @@ -154,16 +160,16 @@ -version) exec echo "tzselect $PKGVERSION$TZVERSION" ;; -*) - echo >&2 "$0: -$opt$OPTARG: unknown option; try '$0 --help'"; exit 1 ;; + say >&2 "$0: -$opt$OPTARG: unknown option; try '$0 --help'"; exit 1 ;; *) - echo >&2 "$0: try '$0 --help'"; exit 1 ;; + say >&2 "$0: try '$0 --help'"; exit 1 ;; esac done shift `expr $OPTIND - 1` case $# in 0) ;; -*) echo >&2 "$0: $1: unknown argument"; exit 1 ;; +*) say >&2 "$0: $1: unknown argument"; exit 1 ;; esac # Make sure the tables are readable. @@ -172,11 +178,26 @@ for f in $TZ_COUNTRY_TABLE $TZ_ZONE_TABLE do <"$f" || { - echo >&2 "$0: time zone files are not set up correctly" + say >&2 "$0: time zone files are not set up correctly" exit 1 } done +# If the current locale does not support UTF-8, convert data to current +# locale's format if possible, as the shell aligns columns better that way. +# Check the UTF-8 of U+12345 CUNEIFORM SIGN URU TIMES KI. +! $AWK 'BEGIN { u12345 = "\360\222\215\205"; exit length(u12345) != 1 }' && + { tmp=`(mktemp -d) 2>/dev/null` || { + tmp=${TMPDIR-/tmp}/tzselect.$$ && + (umask 77 && mkdir -- "$tmp") + };} && + trap 'status=$?; rm -fr -- "$tmp"; exit $status' 0 HUP INT PIPE TERM && + (iconv -f UTF-8 -t //TRANSLIT <"$TZ_COUNTRY_TABLE" >$tmp/iso3166.tab) \ + 2>/dev/null && + TZ_COUNTRY_TABLE=$tmp/iso3166.tab && + iconv -f UTF-8 -t //TRANSLIT <"$TZ_ZONE_TABLE" >$tmp/$zonetabtype.tab && + TZ_ZONE_TABLE=$tmp/$zonetabtype.tab + newline=' ' IFS=$newline @@ -336,8 +357,7 @@ exit 0 }' do - echo >&2 "'$TZ' is not a conforming" \ - 'Posix time zone string.' + say >&2 "'$TZ' is not a conforming Posix time zone string." done TZ_for_date=$TZ;; *) @@ -359,7 +379,7 @@ sort -n | sed "${location_limit}q" ` - regions=`echo "$distance_table" | $AWK ' + regions=`say "$distance_table" | $AWK ' BEGIN { FS = "\t" } { print $NF } '` @@ -369,7 +389,7 @@ "of distance from $coord". doselect $regions region=$select_result - TZ=`echo "$distance_table" | $AWK -v region="$region" ' + TZ=`say "$distance_table" | $AWK -v region="$region" ' BEGIN { FS="\t" } $NF == region { print $4 } '` @@ -429,6 +449,7 @@ } } } + /^#/ { next } $1 ~ cc { print $4 } ' <"$TZ_ZONE_TABLE"` @@ -460,6 +481,7 @@ } } } + /^#/ { next } $1 ~ cc && $4 == region { print $3 } ' <"$TZ_ZONE_TABLE"` esac @@ -467,7 +489,7 @@ # Make sure the corresponding zoneinfo file exists. TZ_for_date=$TZDIR/$TZ <"$TZ_for_date" || { - echo >&2 "$0: time zone files are not set up correctly" + say >&2 "$0: time zone files are not set up correctly" exit 1 } esac @@ -500,15 +522,15 @@ echo >&2 "The following information has been given:" echo >&2 "" case $country%$region%$coord in - ?*%?*%) echo >&2 " $country$newline $region";; - ?*%%) echo >&2 " $country";; - %?*%?*) echo >&2 " coord $coord$newline $region";; - %%?*) echo >&2 " coord $coord";; - *) echo >&2 " TZ='$TZ'" + ?*%?*%) say >&2 " $country$newline $region";; + ?*%%) say >&2 " $country";; + %?*%?*) say >&2 " coord $coord$newline $region";; + %%?*) say >&2 " coord $coord";; + *) say >&2 " TZ='$TZ'" esac - echo >&2 "" - echo >&2 "Therefore TZ='$TZ' will be used.$extra_info" - echo >&2 "Is the above information OK?" + say >&2 "" + say >&2 "Therefore TZ='$TZ' will be used.$extra_info" + say >&2 "Is the above information OK?" doselect Yes No ok=$select_result @@ -523,7 +545,7 @@ *) file=.profile line="TZ='$TZ'; export TZ" esac -echo >&2 " +say >&2 " You can make this change permanent for yourself by appending the line $line to the file '$file' in your home directory; then log out and log in again. @@ -531,4 +553,4 @@ Here is that TZ value again, this time on standard output so that you can use the $0 command in shell scripts:" -echo "$TZ" +say "$TZ" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zdump.c new/zdump.c --- old/zdump.c 2014-10-05 02:38:05.000000000 +0200 +++ new/zdump.c 2015-05-08 23:47:40.000000000 +0200 @@ -246,13 +246,15 @@ extern char * tzname[2]; /* The minimum and maximum finite time values. */ +enum { atime_shift = CHAR_BIT * sizeof (time_t) - 2 }; static time_t const absolute_min_time = ((time_t) -1 < 0 - ? (time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1) + ? (- ((time_t) ~ (time_t) 0 < 0) + - (((time_t) 1 << atime_shift) - 1 + ((time_t) 1 << atime_shift))) : 0); static time_t const absolute_max_time = ((time_t) -1 < 0 - ? - (~ 0 < 0) - ((time_t) -1 << (CHAR_BIT * sizeof (time_t) - 1)) + ? (((time_t) 1 << atime_shift) - 1 + ((time_t) 1 << atime_shift)) : -1); static int longest; static char * progname; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zic.8 new/zic.8 --- old/zic.8 2014-09-11 09:29:22.000000000 +0200 +++ new/zic.8 2015-06-07 04:02:37.000000000 +0200 @@ -374,7 +374,8 @@ It is specified as a year, a month, a day, and a time of day. If this is specified, the time zone information is generated from the given UT offset -and rule change until the time specified. +and rule change until the time specified, which is interpreted using +the rules in effect just before the transition. The month, day, and time of day have the same format as the IN, ON, and AT fields of a rule; trailing fields can be omitted, and default to the earliest possible value for the missing fields. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zic.8.txt new/zic.8.txt --- old/zic.8.txt 2014-09-11 09:29:22.000000000 +0200 +++ new/zic.8.txt 2015-06-07 04:02:37.000000000 +0200 @@ -225,10 +225,11 @@ location. It is specified as a year, a month, a day, and a time of day. If this is specified, the time zone information is generated from the given UT offset and rule change until the time - specified. The month, day, and time of day have the same format - as the IN, ON, and AT fields of a rule; trailing fields can be - omitted, and default to the earliest possible value for the - missing fields. + specified, which is interpreted using the rules in effect just + before the transition. The month, day, and time of day have the + same format as the IN, ON, and AT fields of a rule; trailing + fields can be omitted, and default to the earliest possible value + for the missing fields. The next line must be a "continuation" line; this has the same form as a zone line except that the string "Zone" and the name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zic.c new/zic.c --- old/zic.c 2015-04-20 08:12:58.000000000 +0200 +++ new/zic.c 2015-05-19 10:24:30.000000000 +0200 @@ -443,7 +443,8 @@ ** zic ... 2>&1 | error -t "*" -v ** on BSD systems. */ - fprintf(stderr, _("\"%s\", line %d: "), filename, linenum); + if (filename) + fprintf(stderr, _("\"%s\", line %d: "), filename, linenum); vfprintf(stderr, string, args); if (rfilename != NULL) fprintf(stderr, _(" (rule from \"%s\", line %d)"), @@ -595,7 +596,7 @@ noise = true; break; case 's': - warning(_("-s ignored\n")); + warning(_("-s ignored")); break; } if (optind == argc - 1 && strcmp(argv[optind], "=") == 0) @@ -648,36 +649,43 @@ return errors ? EXIT_FAILURE : EXIT_SUCCESS; } -static void +static bool componentcheck(char const *name, char const *component, char const *component_end) { enum { component_len_max = 14 }; size_t component_len = component_end - component; if (component_len == 0) { - fprintf(stderr, _("%s: file name '%s' contains empty component"), - progname, name); - exit(EXIT_FAILURE); + if (!*name) + error (_("empty file name")); + else + error (_(component == name + ? "file name '%s' begins with '/'" + : *component_end + ? "file name '%s' contains '//'" + : "file name '%s' ends with '/'"), + name); + return false; } if (0 < component_len && component_len <= 2 && component[0] == '.' && component_end[-1] == '.') { - fprintf(stderr, _("%s: file name '%s' contains" - " '%.*s' component"), - progname, name, (int) component_len, component); - exit(EXIT_FAILURE); + error(_("file name '%s' contains '%.*s' component"), + name, (int) component_len, component); + return false; } - if (!noise) - return; - if (0 < component_len && component[0] == '-') - warning(_("file name '%s' component contains leading '-'"), - name); - if (component_len_max < component_len) - warning(_("file name '%s' contains overlength component" - " '%.*s...'"), - name, component_len_max, component); + if (noise) { + if (0 < component_len && component[0] == '-') + warning(_("file name '%s' component contains leading '-'"), + name); + if (component_len_max < component_len) + warning(_("file name '%s' contains overlength component" + " '%.*s...'"), + name, component_len_max, component); + } + return true; } -static void +static bool namecheck(const char *name) { register char const *cp; @@ -701,14 +709,14 @@ ? _("file name '%s' contains byte '%c'") : _("file name '%s' contains byte '\\%o'")), name, c); - return; } if (c == '/') { - componentcheck(name, component, cp); + if (!componentcheck(name, component, cp)) + return false; component = cp + 1; } } - componentcheck(name, component, cp); + return componentcheck(name, component, cp); } static char * @@ -733,7 +741,6 @@ register char * toname; register int fromisdir; - namecheck(tofield); fromname = relname(directory, fromfield); toname = relname(directory, tofield); /* @@ -813,8 +820,8 @@ #define TIME_T_BITS_IN_FILE 64 -static const zic_t min_time = (zic_t) -1 << (TIME_T_BITS_IN_FILE - 1); -static const zic_t max_time = -1 - ((zic_t) -1 << (TIME_T_BITS_IN_FILE - 1)); +static zic_t const min_time = MINVAL (zic_t, TIME_T_BITS_IN_FILE); +static zic_t const max_time = MAXVAL (zic_t, TIME_T_BITS_IN_FILE); /* Estimated time of the Big Bang, in seconds since the POSIX epoch. rounded downward to the negation of a power of two that is @@ -1020,9 +1027,9 @@ break; case LC_LEAP: if (name != leapsec) - warning( -_("%s: Leap line in non leap seconds file %s\n"), - progname, name); + warning(_("%s: Leap line in non leap" + " seconds file %s"), + progname, name); else inleap(fields, nfields); wantcont = false; break; @@ -1178,7 +1185,9 @@ i_untilday = ZFC_TILDAY; i_untiltime = ZFC_TILTIME; z.z_name = NULL; - } else { + } else if (!namecheck(fields[ZF_NAME])) + return false; + else { i_gmtoff = ZF_GMTOFF; i_rule = ZF_RULE; i_format = ZF_FORMAT; @@ -1354,10 +1363,8 @@ error(_("blank FROM field on Link line")); return; } - if (*fields[LF_TO] == '\0') { - error(_("blank TO field on Link line")); - return; - } + if (! namecheck(fields[LF_TO])) + return; l.l_filename = filename; l.l_linenum = linenum; l.l_from = ecpyalloc(fields[LF_FROM]); @@ -1587,7 +1594,6 @@ void *typesptr = ats + timecnt; unsigned char *types = typesptr; - namecheck(name); /* ** Sort. */ @@ -2952,7 +2958,7 @@ if (itsdir(name) <= 0) { char const *e = strerror(err); warning(_("%s: Can't create directory" - " %s: %s\n"), + " %s: %s"), progname, name, e); free(name); return false; ++++++ tzdata2015d.tar.gz -> tzdata2015e.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Makefile new/Makefile --- old/Makefile 2015-04-24 17:11:35.000000000 +0200 +++ new/Makefile 2015-06-13 19:57:13.000000000 +0200 @@ -5,7 +5,7 @@ PACKAGE= tzcode # Version numbers of the code and data distributions. -VERSION= 2015d +VERSION= 2015e # Email address for bug reports. BUGEMAIL= [email protected] @@ -292,23 +292,24 @@ SAFE_CHARSET1= $(TAB_CHAR)' !\"'$$sharp'$$%&'\''()*+,./0123456789:;<=>?@' SAFE_CHARSET2= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`' SAFE_CHARSET3= 'abcdefghijklmnopqrstuvwxyz{|}~' -SAFE_CHARSET= ]$(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3)- -SAFE_CHAR= '['$(SAFE_CHARSET)']' -# NONSYM_CHAR is a regular expression that matches any character -# except for a small number of symbols, where we prefer to stick with +SAFE_CHARSET= $(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3) +SAFE_CHAR= '[]'$(SAFE_CHARSET)'-]' + +# OK_CHAR matches any character allowed in the distributed files. +# This is the same as SAFE_CHAR, except that multibyte letters are +# also allowed so that commentary can contain people's names and quote +# non-English sources. For non-letters the sources are limited to # ASCII renderings for the convenience of maintainers whose text editors # mishandle UTF-8 by default (e.g., XEmacs 21.4.22). -NONSYM_CHAR= '[^–—°′″≈≠≤≥±−×÷∞←→↔·•§¶«»‘’‚‛“”„‟‹›「」『』〝〞〟]' +OK_CHAR= '[][:alpha:]'$(SAFE_CHARSET)'-]' # SAFE_LINE matches a line of safe characters. -# SAFE_SHARP_LINE is similar, except any character can follow '#'; +# SAFE_SHARP_LINE is similar, except any OK character can follow '#'; # this is so that comments can contain non-ASCII characters. -# NONSYM_LINE matches a line of non-symbols. -# VALID_LINE matches a line of any validly-encoded characters. +# OK_LINE matches a line of OK characters. SAFE_LINE= '^'$(SAFE_CHAR)'*$$' -SAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(NONSYM_CHAR)'*)?$$' -NONSYM_LINE= '^'$(NONSYM_CHAR)'*$$' -VALID_LINE= '^.*$$' +SAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(OK_CHAR)'*)?$$' +OK_LINE= '^'$(OK_CHAR)'*$$' # Flags to give 'tar' when making a distribution. # Try to use flags appropriate for GNU tar. @@ -323,6 +324,8 @@ ############################################################################### +#MAKE= make + cc= cc CC= $(cc) -DTZDIR=\"$(TZDIR)\" @@ -371,7 +374,7 @@ all: tzselect zic zdump libtz.a $(TABDATA) -ALL: all date +ALL: all date $(ENCHILADA) install: all $(DATA) $(REDO) $(MANS) mkdir -p $(DESTDIR)$(ETCDIR) $(DESTDIR)$(TZDIR) \ @@ -475,14 +478,11 @@ check_character_set: $(ENCHILADA) LC_ALL=en_US.utf8 && export LC_ALL && \ sharp='#' && \ - ! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \ + ! grep -Env $(SAFE_LINE) Makefile $(MANS) date.1 $(MANTXTS) \ $(MISC) $(SOURCES) $(WEB_PAGES) && \ ! grep -Env $(SAFE_SHARP_LINE) $(TDATA) backzone \ - iso3166.tab leapseconds yearistype.sh zone.tab && \ - test $$(grep -Ecv $(SAFE_SHARP_LINE) Makefile) -eq 1 && \ - ! grep -Env $(NONSYM_LINE) CONTRIBUTING NEWS README Theory \ - $(MANS) date.1 zone1970.tab && \ - ! grep -Env $(VALID_LINE) $(ENCHILADA) + leapseconds yearistype.sh zone.tab && \ + ! grep -Env $(OK_LINE) $(ENCHILADA) check_white_space: $(ENCHILADA) ! grep -En ' '$(TAB_CHAR)"|$$(printf '[\f\r\v]')" $(ENCHILADA) @@ -573,9 +573,9 @@ # The zics below ensure that each data file can stand on its own. # We also do an all-files run to catch links to links. -check_public: $(ENCHILADA) - make maintainer-clean - make "CFLAGS=$(GCC_DEBUG_FLAGS)" $(ENCHILADA) all +check_public: + $(MAKE) maintainer-clean + $(MAKE) "CFLAGS=$(GCC_DEBUG_FLAGS)" ALL mkdir tzpublic for i in $(TDATA) ; do \ $(zic) -v -d tzpublic $$i 2>&1 || exit; \ @@ -594,8 +594,8 @@ zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \ for type in $(TIME_T_ALTERNATIVES); do \ mkdir -p tzpublic/$$type && \ - make clean_misc && \ - make TOPDIR=`pwd`/tzpublic/$$type \ + $(MAKE) clean_misc && \ + $(MAKE) TOPDIR=`pwd`/tzpublic/$$type \ CFLAGS='$(CFLAGS) -Dtime_tz='"'$$type'" \ REDO='$(REDO)' \ install && \ @@ -641,12 +641,12 @@ gpg --armor --detach-sign $? typecheck: - make clean + $(MAKE) clean for i in "long long" unsigned; \ do \ - make CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \ + $(MAKE) CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \ ./zdump -v Europe/Rome ; \ - make clean ; \ + $(MAKE) clean ; \ done zonenames: $(TDATA) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/NEWS new/NEWS --- old/NEWS 2015-04-24 17:11:35.000000000 +0200 +++ new/NEWS 2015-06-13 19:57:13.000000000 +0200 @@ -1,5 +1,34 @@ News for the tz database + +Release 2015e - 2015-06-13 10:56:02 -0700 + + Changes affecting future time stamps + + Morocco will suspend DST from 2015-06-14 03:00 through 2015-07-19 02:00, + not 06-13 and 07-18 as we had guessed. (Thanks to Milamber.) + + Assume Cayman Islands will observe DST starting next year, using US rules. + Although it isn't guaranteed, it is the most likely. + + Changes affecting data format + + The file 'iso3166.tab' now uses UTF-8, so that its entries can better + spell the names of Åland Islands, Côte d'Ivoire, and Réunion. + + Changes affecting code + + When displaying data, tzselect converts it to the current locale's + encoding if the iconv command works. (Problem reported by random832.) + + tzselect no longer mishandles Dominica, fixing a bug introduced + in Release 2014f. (Problem reported by Owen Leibman.) + + zic -l no longer fails when compiled with -DTZDEFAULT=\"/etc/localtime\". + This fixes a bug introduced in Release 2014f. + (Problem reported by Leonardo Chiquitto.) + + Release 2015d - 2015-04-24 08:09:46 -0700 Changes affecting future time stamps diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/africa new/africa --- old/africa 2015-04-21 08:36:37.000000000 +0200 +++ new/africa 2015-06-10 18:37:23.000000000 +0200 @@ -338,9 +338,10 @@ # time this summer, and carry out studies on the possibility of canceling the # practice altogether in future years." # -# From Paul Eggert (2015-04-20): -# For now, assume DST will be canceled. Any resumption would likely -# use different rules anyway. +# From Paul Eggert (2015-04-24): +# Yesterday the office of Egyptian President El-Sisi announced his +# decision to abandon DST permanently. See Ahram Online 2015-04-24. +# http://english.ahram.org.eg/NewsContent/1/64/128509/Egypt/Politics-/Sisi-cancels-daylight-saving-time-in-Egypt.aspx Rule Egypt 2008 only - Aug lastThu 24:00 0 - Rule Egypt 2009 only - Aug 20 24:00 0 - @@ -787,20 +788,41 @@ # will resume again at 02:00 on Saturday, August 2, 2014.... # http://www.mmsp.gov.ma/fr/actualites.aspx?id=586 -# From Paul Eggert (2014-06-05): -# For now, guess that later spring and fall transitions will use 2014's rules, +# From Milamber (2015-06-08): +# (Google Translation) The hour will thus be delayed 60 minutes +# Sunday, June 14 at 3:00, the ministry said in a statement, adding +# that the time will be advanced again 60 minutes Sunday, July 19, +# 2015 at 2:00. The move comes under 2.12.126 Decree of 26 Jumada I +# 1433 (18 April 2012) and the decision of the Head of Government of +# 16 N. 3-29-15 Chaaban 1435 (4 June 2015). +# Source (french): +# http://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/ +# +# From Milamber (2015-06-09): +# http://www.mmsp.gov.ma/fr/actualites.aspx?id=863 +# +# From Michael Deckers (2015-06-09): +# [The gov.ma announcement] would (probably) make the switch on 2015-07-19 go +# from 03:00 to 04:00 rather than from 02:00 to 03:00, as in the patch.... +# I think the patch is correct and the quoted text is wrong; the text in +# <http://lnt.ma/le-maroc-reculera-dune-heure-le-dimanche-14-juin/> agrees +# with the patch. + +# From Paul Eggert (2015-06-08): +# For now, guess that later spring and fall transitions will use 2015's rules, # and guess that Morocco will switch to standard time at 03:00 the last -# Saturday before Ramadan, and back to DST at 02:00 the first Saturday after -# Ramadan. To implement this, transition dates for 2015 through 2037 were +# Sunday before Ramadan, and back to DST at 02:00 the first Sunday after +# Ramadan. To implement this, transition dates for 2016 through 2037 were # determined by running the following program under GNU Emacs 24.3, with the # results integrated by hand into the table below. -# (let ((islamic-year 1436)) +# (let ((islamic-year 1437)) +# (require 'cal-islam) # (while (< islamic-year 1460) # (let ((a (calendar-islamic-to-absolute (list 9 1 islamic-year))) # (b (calendar-islamic-to-absolute (list 10 1 islamic-year))) -# (saturday 6)) -# (while (/= saturday (mod (setq a (1- a)) 7))) -# (while (/= saturday (mod b 7)) +# (sunday 0)) +# (while (/= sunday (mod (setq a (1- a)) 7))) +# (while (/= sunday (mod b 7)) # (setq b (1+ b))) # (setq a (calendar-gregorian-from-absolute a)) # (setq b (calendar-gregorian-from-absolute b)) @@ -844,32 +866,30 @@ Rule Morocco 2013 only - Jul 7 3:00 0 - Rule Morocco 2013 only - Aug 10 2:00 1:00 S Rule Morocco 2013 max - Oct lastSun 3:00 0 - -Rule Morocco 2014 2022 - Mar lastSun 2:00 1:00 S +Rule Morocco 2014 2021 - Mar lastSun 2:00 1:00 S Rule Morocco 2014 only - Jun 28 3:00 0 - Rule Morocco 2014 only - Aug 2 2:00 1:00 S -Rule Morocco 2015 only - Jun 13 3:00 0 - -Rule Morocco 2015 only - Jul 18 2:00 1:00 S -Rule Morocco 2016 only - Jun 4 3:00 0 - -Rule Morocco 2016 only - Jul 9 2:00 1:00 S -Rule Morocco 2017 only - May 20 3:00 0 - -Rule Morocco 2017 only - Jul 1 2:00 1:00 S -Rule Morocco 2018 only - May 12 3:00 0 - -Rule Morocco 2018 only - Jun 16 2:00 1:00 S -Rule Morocco 2019 only - May 4 3:00 0 - -Rule Morocco 2019 only - Jun 8 2:00 1:00 S -Rule Morocco 2020 only - Apr 18 3:00 0 - -Rule Morocco 2020 only - May 30 2:00 1:00 S -Rule Morocco 2021 only - Apr 10 3:00 0 - -Rule Morocco 2021 only - May 15 2:00 1:00 S -Rule Morocco 2022 only - Apr 2 3:00 0 - -Rule Morocco 2022 only - May 7 2:00 1:00 S -Rule Morocco 2023 only - Apr 22 2:00 1:00 S -Rule Morocco 2024 only - Apr 13 2:00 1:00 S -Rule Morocco 2025 only - Apr 5 2:00 1:00 S +Rule Morocco 2015 only - Jun 14 3:00 0 - +Rule Morocco 2015 only - Jul 19 2:00 1:00 S +Rule Morocco 2016 only - Jun 5 3:00 0 - +Rule Morocco 2016 only - Jul 10 2:00 1:00 S +Rule Morocco 2017 only - May 21 3:00 0 - +Rule Morocco 2017 only - Jul 2 2:00 1:00 S +Rule Morocco 2018 only - May 13 3:00 0 - +Rule Morocco 2018 only - Jun 17 2:00 1:00 S +Rule Morocco 2019 only - May 5 3:00 0 - +Rule Morocco 2019 only - Jun 9 2:00 1:00 S +Rule Morocco 2020 only - Apr 19 3:00 0 - +Rule Morocco 2020 only - May 24 2:00 1:00 S +Rule Morocco 2021 only - Apr 11 3:00 0 - +Rule Morocco 2021 only - May 16 2:00 1:00 S +Rule Morocco 2022 only - May 8 2:00 1:00 S +Rule Morocco 2023 only - Apr 23 2:00 1:00 S +Rule Morocco 2024 only - Apr 14 2:00 1:00 S +Rule Morocco 2025 only - Apr 6 2:00 1:00 S Rule Morocco 2026 max - Mar lastSun 2:00 1:00 S -Rule Morocco 2035 only - Oct 27 3:00 0 - -Rule Morocco 2036 only - Oct 18 3:00 0 - -Rule Morocco 2037 only - Oct 10 3:00 0 - +Rule Morocco 2036 only - Oct 19 3:00 0 - +Rule Morocco 2037 only - Oct 4 3:00 0 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Casablanca -0:30:20 - LMT 1913 Oct 26 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/backzone new/backzone --- old/backzone 2015-03-24 20:36:37.000000000 +0100 +++ new/backzone 2015-05-15 23:33:01.000000000 +0200 @@ -279,11 +279,6 @@ -4:30 - ANT 1965 # Netherlands Antilles Time -4:00 - AST -# Cayman Is -Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown - -5:07:11 - 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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/iso3166.tab new/iso3166.tab --- old/iso3166.tab 2014-07-18 22:31:54.000000000 +0200 +++ new/iso3166.tab 2015-05-03 03:00:13.000000000 +0200 @@ -3,11 +3,10 @@ # This file is in the public domain, so clarified as of # 2009-05-17 by Arthur David Olson. # -# From Paul Eggert (2014-07-18): +# From Paul Eggert (2015-05-02): # This file contains a table of two-letter country codes. Columns are # separated by a single tab. Lines beginning with '#' are comments. -# Although all text currently uses ASCII encoding, this is planned to -# change to UTF-8 soon. The columns of the table are as follows: +# All text uses UTF-8 encoding. The columns of the table are as follows: # # 1. ISO 3166-1 alpha-2 country code, current as of # ISO 3166-1 Newsletter VI-16 (2013-07-11). See: Updates on ISO 3166 @@ -38,7 +37,7 @@ AT Austria AU Australia AW Aruba -AX Aaland Islands +AX Åland Islands AZ Azerbaijan BA Bosnia & Herzegovina BB Barbados @@ -67,7 +66,7 @@ CF Central African Rep. CG Congo (Rep.) CH Switzerland -CI Cote d'Ivoire +CI Côte d'Ivoire CK Cook Islands CL Chile CM Cameroon @@ -211,7 +210,7 @@ PW Palau PY Paraguay QA Qatar -RE Reunion +RE Réunion RO Romania RS Serbia RU Russia diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/northamerica new/northamerica --- old/northamerica 2015-04-18 04:10:32.000000000 +0200 +++ new/northamerica 2015-05-15 23:33:01.000000000 +0200 @@ -2661,7 +2661,17 @@ -4:00 US A%sT # Cayman Is -# See America/Panama. + +# From Paul Eggert (2015-05-15): +# The Cayman government has decided to introduce DST in 2016, the idea being +# to keep in sync with New York. The legislation hasn't passed but the change +# seems quite likely. See: Meade B. Cayman 27. +# http://www.cayman27.com.ky/2015/05/15/clock-ticks-toward-daylight-saving-time-in-cayman + +Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown + -5:07:11 - KMT 1912 Feb # Kingston Mean Time + -5:00 - EST 2016 + -5:00 US E%sT # Costa Rica @@ -3184,7 +3194,6 @@ Zone America/Panama -5:18:08 - LMT 1890 -5:19:36 - CMT 1908 Apr 22 # Colón Mean Time -5:00 - EST -Link America/Panama America/Cayman # Puerto Rico # There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/southamerica new/southamerica --- old/southamerica 2015-04-06 06:06:42.000000000 +0200 +++ new/southamerica 2015-05-03 00:20:28.000000000 +0200 @@ -30,7 +30,7 @@ # I suggest the use of _Summer time_ instead of the more cumbersome # _daylight-saving time_. _Summer time_ seems to be in general use # in Europe and South America. -# -- E O Cutler, _New York Times_ (1937-02-14), quoted in +# -- E O Cutler, _New York Times_ (1937-02-14), quoted in # H L Mencken, _The American Language: Supplement I_ (1960), p 466 # # Earlier editions of these tables also used the North American style diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/zone1970.tab new/zone1970.tab --- old/zone1970.tab 2015-01-28 19:25:25.000000000 +0100 +++ new/zone1970.tab 2015-05-15 23:33:01.000000000 +0200 @@ -206,6 +206,7 @@ KI +0152-15720 Pacific/Kiritimati Line Islands KP +3901+12545 Asia/Pyongyang KR +3733+12658 Asia/Seoul +KY +1918-08123 America/Cayman KZ +4315+07657 Asia/Almaty most locations KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda) KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe) @@ -259,7 +260,7 @@ NU -1901-16955 Pacific/Niue NZ,AQ -3652+17446 Pacific/Auckland New Zealand time NZ -4357-17633 Pacific/Chatham Chatham Islands -PA,KY +0858-07932 America/Panama +PA +0858-07932 America/Panama PE -1203-07703 America/Lima PF -1732-14934 Pacific/Tahiti Society Islands PF -0900-13930 Pacific/Marquesas Marquesas Islands
