Просмотр исходного кода

Remove subseconds from vanguard data

* NEWS: Do not mention subseconds in data.
* theory.html: Improve description of problems with subseconds.
* zic.8: Don’t imply zic will someday transmit subsecond info.
* ziguard.awk: Remove translation of subseconds.
Paul Eggert 8 лет назад
Родитель
Сommit
08bc5f2389
4 измененных файлов с 30 добавлено и 64 удалено
  1. 16 17
      NEWS
  2. 7 4
      theory.html
  3. 1 1
      zic.8
  4. 6 42
      ziguard.awk

+ 16 - 17
NEWS

@@ -4,7 +4,7 @@ Unreleased, experimental changes
 
   Briefly:
   Add support for vanguard and rearguard data consumers.
-  Add fractional seconds to source data format and to vanguard data.
+  Add subsecond precision to source data format, though not to data.
 
   Changes to past time stamps
 
@@ -30,16 +30,14 @@ Unreleased, experimental changes
 
     * In the current version, the main and rearguard formats are
       identical and match that of 2018c, so this change does not
-      affect default behavior.  The vanguard format contains two
-      features not in the main format: fractional seconds and negative
-      DST offsets.  Fractional seconds were added in this release,
-      where they affect only zic input (output is unaffected).
-      Negative DST offsets improve support for Ireland, which uses
-      Irish Standard Time (IST, UTC+01) in summer and GMT (UTC) in
-      winter.  tzcode has supported negative DST offsets for decades,
-      and this feature should move to the main format soon.  However,
-      it will not move to the rearguard format for quite some time
-      because some downstream parsers do not support it.
+      affect default behavior.  The vanguard format currently contains
+      one feature not in the main format: negative DST offsets.  This
+      improves support for Ireland, which uses Irish Standard Time
+      (IST, UTC+01) in summer and GMT (UTC) in winter.  tzcode has
+      supported negative DST offsets for decades, and this feature
+      should move to the main format soon.  However, it will not move
+      to the rearguard format for quite some time because some
+      downstream parsers do not support it.
 
     * The build procedure constructs three files vanguard.zi, main.zi,
       and rearguard.zi, one for each format.  The files represent the
@@ -54,12 +52,13 @@ Unreleased, experimental changes
 
   Changes to code
 
-    zic now accepts fractional seconds in expressions like 00:19:32.13
-    (the UT offset of the Netherlands from 1835 to 1937).  Although
-    zic currently rounds these fractions to the nearest integer
-    (breaking ties to the even integer), the fractions may be useful
-    to applications requiring more precision in historical timestamps.
-    This extension is currently used only in vanguard.zi.
+    zic now accepts subsecond precision in expressions like
+    00:19:32.13, which is approximately the legal time of the
+    Netherlands from 1835 to 1937.  However, because it is
+    questionable whether the few recorded uses of non-integer offsets
+    had subsecond precision in practice, there are no plans for tzdata
+    to use this feature.  (Thanks to Steve Allen for pointing out
+    the limitations of historical data in this area.)
 
     The code is a bit more portable to MS-Windows.  (Thanks to Manuela
     Friedrich).

+ 7 - 4
theory.html

@@ -606,12 +606,15 @@ href="https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanes
   </li>
   <li>
     Sometimes historical timekeeping was specified more precisely
-    than what the <code><abbr>tz</abbr></code> database can handle.
+    than what the <code><abbr>tz</abbr></code> code can handle.
     For example, from 1909 to 1937 <a
     href="https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm"
-    hreflang="nl">Netherlands clocks</a> were legally <abbr>UT</abbr>
-    +00:19:32.13, but the <code><abbr>tz</abbr></code>
-    database cannot represent the fractional second.
+    hreflang="nl">Netherlands clocks</a> were legally Amsterdam Mean
+    Time (estimated to be <abbr>UT</abbr>
+    +00:19:32.13), but the <code><abbr>tz</abbr></code>
+    code cannot represent the fractional second.
+    In practice these old specifications were rarely if ever
+    implemented to subsecond precision.
   </li>
   <li>
     Even when all the timestamp transitions recorded by the

+ 1 - 1
zic.8

@@ -267,7 +267,7 @@ where hour 0 is midnight at the start of the day,
 and hour 24 is midnight at the end of the day.
 Although
 .I zic
-currently rounds fractional seconds to the nearest integer
+rounds times to the nearest integer second
 (breaking ties to the even integer), the fractions may be useful
 to other applications requiring greater precision.
 The source format does not specify any maximum precision.

+ 6 - 42
ziguard.awk

@@ -4,13 +4,13 @@
 
 # This is not a general-purpose converter; it is designed for current tzdata.
 #
-# When converting to vanguard form, the output can use fractional seconds
-# and negative DST offsets.
+# When converting to vanguard form, the output can use negative DST
+# offsets.
 #
-# When converting to rearguard form, the output omits fractional
-# seconds and uses only positive DST offsets.  The idea is for the
-# output data to simulate the behavior of the input data as best it
-# can within the constraints of the rearguard format.
+# When converting to rearguard form, the output uses only positive DST
+# offsets.  The idea is for the output data to simulate the behavior
+# of the input data as best it can within the constraints of the
+# rearguard format.
 
 BEGIN {
   dst_type["vanguard.zi"] = 1
@@ -20,26 +20,6 @@ BEGIN {
   # The command line should set OUTFILE to the name of the output file.
   if (!dst_type[outfile]) exit 1
   vanguard = outfile == "vanguard.zi"
-
-  # List non-integer standard times more accurately if known.
-  # This list does not attempt to record every UT offset that is
-  # not an integral multiple of 1 s; it merely records those that
-  # do not appear to be just LMT.
-  frac["-5:36:13"] = "-5:36:13.3" # America/Costa_Rica before 1921
-  frac["-5:07:10"] = "-5:07:10.41" # America/Jamaica before 1912
-  frac["-4:16:48"] = "-4:16:48.25" # America/Cordoba etc. 1894-1920
-  frac["-0:36:45"] = "-0:36:44.68" # Europe/Lisbon before 1912
-  frac["-0:25:21"] = "-0:25:21.1" # Europe/Dublin 1880-1916
-  frac["0:19:32"] = "0:19:32.13" # Europe/Amsterdam before 1937
-  frac["1:39:49"] = "1:39:49.2" # Europe/Helsinki before 1921
-  frac["2:05:09"] = "2:05:08.9" # Africa/Cairo before 1900
-  frac["4:37:11"] = "4:37:10.8" # Asia/Tashkent before 1924
-  frac["7:06:30"] = "7:06:30.1333" #... Asia/Ho_Chi_Minh 1906-1911
-  frac["7:07:12"] = "7:07:12.5" # Asia/Jakarta before 1923
-  frac["7:36:42"] = "7:36:41.7" # Asia/Hong_Kong before 1904
-  frac["8:05:43"] = "8:05:43.2" # Asia/Shanghai before 1901
-
-  fract["23:47:12"] = "23:47:12.5" # Asia/Jakarta 1923-12-31 transition
 }
 
 /^Zone/ { zone = $2 }
@@ -62,22 +42,6 @@ outfile != "main.zi" {
       sub(/^/, "#")
     }
   }
-
-  # Add or remove fractional seconds as needed in UT offsets.
-  f = $1 == "Zone" ? 3 : 1
-  for (rounded in frac) {
-    original = frac[rounded]
-    if ($f == rounded || $f == original) {
-      $f = vanguard ? original : rounded
-    }
-  }
-  # Likewise for transition times.
-  for (rounded in fract) {
-    original = fract[rounded]
-    if ($(f + 6) == rounded || $(f + 6) == original) {
-      $(f + 6) = vanguard ? original : rounded
-    }
-  }
 }
 
 # If a Link line is followed by a Zone line for the same data, comment