tz-link.html revision 1.12
1<!DOCTYPE html>
2<html lang="en">
3<head>
4<title>Sources for time zone and daylight saving time data</title>
5<meta charset="UTF-8">
6<style>
7pre {margin-left: 2em; white-space: pre-wrap;}
8</style>
9</head>
10<body>
11<h1>Sources for time zone and daylight saving time data</h1>
12<p>
13<a href="https://en.wikipedia.org/wiki/Time_zone">Time zone</a> and
14<a href="https://en.wikipedia.org/wiki/Daylight_saving_time">daylight-saving</a>
15rules are controlled by individual
16governments. They are sometimes changed with little notice, and their
17histories and planned futures are often recorded only fitfully. Here
18is a summary of attempts to organize and record relevant data in this
19area.
20</p>
21  <h3>Outline</h3>
22  <nav>
23    <ul>
24      <li>The <code><abbr>tz</abbr></code> database product and process
25	<ul>
26	  <li><a href="#tzdb">The <code><abbr>tz</abbr></code> database</a></li>
27	  <li><a href="#download">Downloading the <code><abbr>tz</abbr></code> database</a></li>
28	  <li><a href="#changes">Changes to the <code><abbr>tz</abbr></code> database</a></li>
29	  <li><a href="#commentary">Commentary on the <code><abbr>tz</abbr></code> database</a></li>
30	</ul>
31      </li>
32      <li>Uses of the <code><abbr>tz</abbr></code> database
33	<ul>
34	  <li><a href="#web">Web sites using recent versions of the <code><abbr>tz</abbr></code> database</a></li>
35	  <li><a href="#protocols">Network protocols for <code><abbr>tz</abbr></code> data</a></li>
36	  <li><a href="#compilers">Other <code><abbr>tz</abbr></code> compilers</a></li>
37	  <li><a href="#TZif">Other <abbr>TZif</abbr> readers</a></li>
38	  <li><a href="#software">Other <code><abbr>tz</abbr></code>-based time zone software</a></li>
39	</ul>
40      </li>
41      <li>Related data
42	<ul>
43	  <li><a href="#other-dbs">Other time zone databases</a></li>
44	  <li><a href="#maps">Maps</a></li>
45	  <li><a href="#boundaries">Time zone boundaries</a></li>
46	</ul>
47      </li>
48      <li>Timekeeping concepts
49	<ul>
50	  <li><a href="#civil">Civil time concepts and history</a></li>
51	  <li><a href="#national">National histories of legal time</a></li>
52	  <li><a href="#costs">Costs and benefits of time shifts</a></li>
53	  <li><a href="#precision">Precision timekeeping</a></li>
54	  <li><a href="#notation">Time notation</a></li>
55	  <li><a href="#see-also">See also</a></li>
56	</ul>
57      </li>
58    </ul>
59  </nav>
60
61<section>
62<h2 id="tzdb">The <code><abbr title="time zone">tz</abbr></code> database</h2>
63<p>
64The <a href="https://en.wikipedia.org/wiki/Public_domain">public-domain</a>
65time zone database contains code and data
66that represent the history of local time
67for many representative locations around the globe.
68It is updated periodically to reflect changes made by political bodies
69to time zone boundaries and daylight saving rules.
70This database (known as <code><abbr>tz</abbr></code>,
71<code><abbr>tzdb</abbr></code>, or <code>zoneinfo</code>)
72is used by several implementations,
73including
74<a href="https://www.gnu.org/software/libc/">the
75<abbr title="GNU's Not Unix">GNU</abbr>
76C Library</a> (used in
77<a href="https://en.wikipedia.org/wiki/Linux"><abbr>GNU</abbr>/Linux</a>),
78<a href="https://www.android.com">Android</a>,
79<a href="https://www.freebsd.org">Free<abbr
80title="Berkeley Software Distribution">BSD</abbr></a>,
81<a href="https://netbsd.org">Net<abbr>BSD</abbr></a>,
82<a href="https://www.openbsd.org">Open<abbr>BSD</abbr></a>,
83<a href="https://www.chromium.org/chromium-os">Chromium OS</a>,
84<a href="https://cygwin.com">Cygwin</a>,
85<a href="https://mariadb.org">MariaDB</a>,
86<a href="https://en.wikipedia.org/wiki/MINIX">MINIX</a>,
87<a href="https://www.mysql.com">MySQL</a>,
88<a href="https://en.wikipedia.org/wiki/WebOS"><abbr
89title="Web Operating System">webOS</abbr></a>,
90<a href="https://en.wikipedia.org/wiki/IBM_AIX"><abbr
91title="Advanced Interactive eXecutive">AIX</abbr></a>,
92<a href="https://www.apple.com/ios"><abbr
93title="iPhone OS">iOS</abbr></a>,
94<a href="https://www.apple.com/macos">macOS</a>,
95<a href="https://www.microsoft.com/en-us/windows">Microsoft Windows</a>,
96<a href="https://www.vmssoftware.com">Open<abbr
97title="Virtual Memory System">VMS</abbr></a>,
98<a href="https://www.oracle.com/database/">Oracle Database</a>, and
99<a href="https://www.oracle.com/solaris">Oracle Solaris</a>.</p>
100<p>
101Each main entry in the database represents a <dfn>timezone</dfn>
102for a set of civil-time clocks that have all agreed since 1970.
103Timezones are typically identified by continent or ocean and then by the
104name of the largest city within the region containing the clocks.
105For example, <code>America/New_York</code>
106represents most of the <abbr title="United States">US</abbr> eastern time zone;
107<code>America/Phoenix</code> represents most of Arizona, which
108uses mountain time without daylight saving time (<abbr>DST</abbr>);
109<code>America/Detroit</code> represents most of Michigan, which uses
110eastern time but with different <abbr>DST</abbr> rules in 1975;
111and other entries represent smaller regions like Starke County,
112Indiana, which switched from central to eastern time in 1991
113and switched back in 2006.
114To use the database on an extended <a
115href="https://en.wikipedia.org/wiki/POSIX"><abbr
116title="Portable Operating System Interface">POSIX</abbr></a>
117implementation set the <code><abbr>TZ</abbr></code>
118environment variable to the location's full name,
119e.g., <code><abbr>TZ</abbr>="America/New_York"</code>.</p>
120<p>
121Associated with each timezone is a history of offsets from
122<a href="https://en.wikipedia.org/wiki/Universal_Time">Universal
123Time</a> (<abbr>UT</abbr>), which is <a
124href="https://en.wikipedia.org/wiki/Greenwich_Mean_Time">Greenwich Mean
125Time</a> (<abbr>GMT</abbr>) with days beginning at midnight;
126for timestamps after 1960 this is more precisely <a
127href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time">Coordinated
128Universal Time</a> (<abbr>UTC</abbr>).
129The database also records when daylight saving time was in use,
130along with some time zone abbreviations such as <abbr>EST</abbr>
131for Eastern Standard Time in the <abbr>US</abbr>.</p>
132</section>
133
134<section>
135<h2 id="download">Downloading the <code><abbr>tz</abbr></code> database</h2>
136<p>
137The following <a
138href="https://en.wikipedia.org/wiki/Unix_shell">shell</a> commands download
139the latest release's two
140<a href="https://en.wikipedia.org/wiki/Tar_(computing)">tarballs</a>
141to a <abbr>GNU</abbr>/Linux or similar host.</p>
142<pre><code>mkdir tzdb
143cd tzdb
144<a href="https://www.gnu.org/software/wget/">wget</a> https://www.iana.org/time-zones/repository/tzcode-latest.tar.gz
145wget https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz
146<a href="https://www.gnu.org/software/gzip/">gzip</a> -dc tzcode-latest.tar.gz | <a href="https://www.gnu.org/software/tar/">tar</a> -xf -
147gzip -dc tzdata-latest.tar.gz | tar -xf -
148</code></pre>
149<p>Alternatively, the following shell commands download the same
150release in a single-tarball format containing extra data
151useful for regression testing:</p>
152<pre><code>wget <a href="https://www.iana.org/time-zones/repository/tzdb-latest.tar.lz">https://www.iana.org/time-zones/repository/tzdb-latest.tar.lz</a>
153<a href="https://www.nongnu.org/lzip/">lzip</a> -dc tzdb-latest.tar.lz | tar -xf -
154</code></pre>
155<p>These commands use convenience links to the latest release
156of the <code><abbr>tz</abbr></code> database hosted by the
157<a href="https://www.iana.org/time-zones">Time Zone Database website</a>
158of the <a href="https://www.iana.org">Internet Assigned Numbers
159Authority (IANA)</a>.
160Older releases are in files named
161<code>tzcode<var>V</var>.tar.gz</code>,
162<code>tzdata<var>V</var>.tar.gz</code>, and
163<code>tzdb-<var>V</var>.tar.lz</code>,
164where <code><var>V</var></code> is the version.
165Since 1996, each version has been a four-digit year followed by
166lower-case letter (<samp>a</samp> through <samp>z</samp>,
167then <samp>za</samp> through <samp>zz</samp>, then <samp>zza</samp>
168through <samp>zzz</samp>, and so on).
169Since version 1999g, each release has been distributed in
170<a href="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06">POSIX
171ustar interchange format</a>, compressed as described above;
172older releases use a nearly-compatible format.
173Since version 2016h, each release has contained a text file named
174"<samp>version</samp>" whose first (and currently only) line is the version.
175Older releases are <a href="https://ftp.iana.org/tz/releases/">archived</a>,
176and are also available in an
177<a href="ftp://ftp.iana.org/tz/releases/"><abbr
178title="File Transfer Protocol">FTP</abbr> directory</a> via a
179less-secure protocol.</p>
180<p>Alternatively, a development repository of code and data can be
181retrieved from <a href="https://github.com">GitHub</a> via the shell
182command:</p>
183<pre><code><a href="https://git-scm.com">git</a> clone <a href="https://github.com/eggert/tz">https://github.com/eggert/tz</a>
184</code></pre>
185<p>
186Since version 2012e, each release has been tagged in development repositories.
187Untagged commits are less well tested and probably contain
188more errors.</p>
189<p>
190After obtaining the code and data files, see the
191<code>README</code> file for what to do next.
192The code lets you compile the <code><abbr>tz</abbr></code> source files into
193machine-readable binary files, one for each location. The binary files
194are in a special timezone information format (<dfn><abbr>TZif</abbr></dfn>)
195specified by <a href="https://tools.ietf.org/html/8536">Internet
196<abbr>RFC</abbr> 8536</a>.
197The code also lets
198you read a <abbr>TZif</abbr> file and interpret timestamps for that
199location.</p>
200</section>
201
202<section>
203<h2 id="changes">Changes to the <code><abbr>tz</abbr></code> database</h2>
204<p>
205The <code><abbr>tz</abbr></code> code and data
206are by no means authoritative. If you find errors, please
207send changes to <a href="mailto:tz@iana.org"><code>tz@iana.org</code></a>,
208the time zone mailing list. You can also <a
209href="https://mm.icann.org/mailman/listinfo/tz">subscribe</a> to it
210and browse the <a
211href="https://mm.icann.org/pipermail/tz/">archive of old
212messages</a>.
213<a href="https://tzdata-meta.timtimeonline.com/">Metadata for mailing list
214discussions</a> and corresponding data changes can be
215generated <a href="https://github.com/timparenti/tzdata-meta">automatically</a>.
216</p>
217<p>
218If your government plans to change its time zone boundaries or
219daylight saving rules, inform <code>tz@iana.org</code> well in
220advance, as this will coordinate updates to many cell phones,
221computers, and other devices around the world.
222The change should be officially announced at least a year before it affects
223how clocks operate; otherwise, there is a good chance that some
224clocks will operate incorrectly after the change, due
225to delays in propagating updates to software and data. The shorter
226the notice, the more likely clock problems will arise; see "<a
227href="https://codeofmatt.com/2016/04/23/on-the-timing-of-time-zone-changes/">On
228the Timing of Time Zone Changes</a>" for examples.
229The <code><abbr>tz</abbr></code> data can represent planned changes
230far into the future, and a long-planned change can easily be reverted
231or otherwise altered with a year's notice before the change would have
232affected clocks.
233</p>
234<p>
235Changes to the <code><abbr>tz</abbr></code> code and data are often
236propagated to clients via operating system updates, so
237client <code><abbr>tz</abbr></code> data can often be corrected by
238applying these updates. With GNU/Linux and similar systems, if your
239maintenance provider has not yet adopted the
240latest <code><abbr>tz</abbr></code> data, you can often short-circuit
241the process by tailoring the generic instructions in
242the <code><abbr>tz</abbr> README</code> file and installing the latest
243data yourself. System-specific instructions for installing the
244latest <code><abbr>tz</abbr></code> data have also been published
245for <a href="https://developer.ibm.com/articles/au-aix-olson-time-zone/"><abbr>AIX</abbr></a>,
246<a
247href="https://source.android.com/devices/tech/config/timezone-rules">Android</a>,
248<a
249href="https://unicode-org.github.io/icu/userguide/datetime/timezone/"><abbr
250title="International Components for Unicode">ICU</abbr></a>,
251<a href="https://www.ibm.com/support/pages/java-sdk-time-zone-update-utility"><abbr>IBM</abbr>
252JDK</a>,
253<a href="https://www.joda.org/joda-time/tz_update.html">Joda-Time</a>, <a
254href="https://dev.mysql.com/doc/refman/en/time-zone-support.html">MySQL</a>,
255<a href="https://nodatime.org/userguide/tzdb">Noda Time</a>, and <a
256href="https://www.oracle.com/java/technologies/javase/tzupdater-readme.html">OpenJDK/Oracle JDK</a>.
257</p>
258<p>Since version 2013a,
259sources for the <code><abbr>tz</abbr></code> database have been
260<a href="https://en.wikipedia.org/wiki/UTF-8"><abbr
261title="Unicode Transformation Format 8-bit">UTF-8</abbr></a>
262<a href="https://en.wikipedia.org/wiki/Text_file">text files</a>
263with lines terminated by <a href="https://en.wikipedia.org/wiki/Newline"><abbr
264title="linefeed">LF</abbr></a>,
265which can be modified by common text editors such
266as <a href="https://www.gnu.org/software/emacs/">GNU Emacs</a>,
267<a href="https://wiki.gnome.org/Apps/Gedit">gedit</a>, and
268<a href="https://www.vim.org">vim</a>.
269Specialized source-file editing can be done via the
270<a href="https://packagecontrol.io/packages/zoneinfo">Sublime
271zoneinfo</a> package for <a
272href="https://www.sublimetext.com">Sublime Text</a> and the <a
273href="https://marketplace.visualstudio.com/items?itemName=gilmoreorless.vscode-zoneinfo">VSCode
274zoneinfo</a> extension for <a href="https://code.visualstudio.com">Visual
275Studio Code</a>.
276</p>
277<p>
278For further information about updates, please see
279<a href="https://tools.ietf.org/html/rfc6557">Procedures for
280Maintaining the Time Zone Database</a> (Internet <abbr
281title="Request For Comments">RFC</abbr> 6557). More detail can be
282found in <a href="theory.html">Theory and pragmatics of the
283<code><abbr>tz</abbr></code> code and data</a>.
284<a href="https://a0.github.io/a0-tzmigration/">A0 TimeZone Migration</a>
285displays changes between recent <code><abbr>tzdb</abbr></code> versions.
286</p>
287</section>
288
289<section>
290<h2 id="commentary">Commentary on the <code><abbr>tz</abbr></code> database</h2>
291<ul>
292<li>The article
293<a href="https://en.wikipedia.org/wiki/Tz_database">tz database</a> is
294an encyclopedic summary.</li>
295<li><a href="tz-how-to.html">How to Read the
296tz Database Source Files</a> explains the <code><abbr>tz</abbr></code>
297database format.</li>
298<li><a
299href="https://blog.jonudell.net/2009/10/23/a-literary-appreciation-of-the-olsonzoneinfotz-database/">A
300literary appreciation of the Olson/Zoneinfo/tz database</a> comments on the
301database's style.</li>
302<li><a href="https://doi.org/10.1145/3340301.3341125">What time is it:
303managing time in the internet</a> analyzes the database longitudinally.</li>
304</ul>
305</section>
306
307<section>
308<h2 id="web">Web sites using recent versions of the
309<code><abbr>tz</abbr></code> database</h2>
310<p>
311These are listed roughly in ascending order of complexity and fanciness.
312</p>
313<ul>
314<li><a href="https://time.is">Time.is</a> shows locations'
315time and zones.</li>
316<li><a href="https://www.timejones.com">TimeJones.com</a>,
317<a href="https://timezoneconverterapp.com">Time Zone Converter</a> and
318<a href="https://www.worldclock.com">The World Clock</a>
319are time zone converters.</li>
320<li><a href="https://timezonedb.com/download">TimeZoneDB Database</a>
321publishes <code><abbr>tzdb</abbr></code>-derived data in
322<a href="https://en.wikipedia.org/wiki/Comma-separated_values"><abbr
323title="comma-separated values">CSV</abbr></a> and
324in <a href="https://en.wikipedia.org/wiki/SQL"><abbr
325title="Structured Query Language">SQL</abbr></a> form.</li>
326<li><a
327href="https://twiki.org/cgi-bin/xtra/tzdatepick.html">Date and Time Gateway</a>
328lets you see the <code><abbr>TZ</abbr></code> values directly.</li>
329<li><a
330href="http://www.convertit.com/Go/ConvertIt/World_Time/Current_Time.ASP">Current
331Time in 1000 Places</a> uses descriptions of the values.</li>
332<li><a href="https://timezoneconverterapp.com/">Time Zone Converter</a>
333uses a pulldown menu.</li>
334<li><a href="https://home.kpn.nl/vanadovv/time/TZworld.html">Complete
335timezone information for all countries</a>
336displays tables of <abbr>DST</abbr> rules.
337<li><a href="https://www.timeanddate.com/worldclock/">The World Clock &ndash;
338Worldwide</a> lets you sort zone names and convert times.</li>
339<li><a href="https://24timezones.com">24TimeZones</a> has a world
340time map and a time converter.</li>
341<li><a href="https://www.zeitverschiebung.net/en/">Time Difference</a>
342calculates the current time difference between locations.</li>
343<li><a href="http://www.wx-now.com">Weather Now</a> and
344<a href="http://www.thetimenow.com">The Time Now</a> list the weather too.</li>
345</ul>
346</section>
347
348<section>
349<h2 id="protocols">Network protocols for <code><abbr>tz</abbr></code> data</h2>
350<ul>
351<li>The <a href="https://www.ietf.org">Internet Engineering Task Force</a>'s
352<a href="https://datatracker.ietf.org/wg/tzdist/charter/">Time Zone Data
353Distribution Service (tzdist) working group</a> defined <a
354href="https://tools.ietf.org/html/rfc7808">TZDIST</a>
355(Internet <abbr>RFC</abbr> 7808), a time zone data distribution service,
356along with <a href="https://tools.ietf.org/html/rfc7809">CalDAV</a>
357(Internet <abbr>RFC</abbr> 7809), a calendar access protocol for
358transferring time zone data by reference.
359<a href="https://devguide.calconnect.org/Time-Zones/TZDS/">TZDIST
360implementations</a> are available.
361The <a href="https://www.ietf.org/mailman/listinfo/tzdist-bis">tzdist-bis
362mailing list</a> discusses possible extensions.</li>
363<li>The <a href="https://tools.ietf.org/html/rfc5545">
364Internet Calendaring and Scheduling Core Object Specification
365(iCalendar)</a> (Internet <abbr>RFC</abbr> 5445)
366covers time zone
367data; see its VTIMEZONE calendar component.
368The iCalendar format requires specialized parsers and generators; a
369variant <a href="https://tools.ietf.org/html/rfc6321">xCal</a>
370(Internet <abbr>RFC</abbr> 6321) uses
371<a href="https://www.w3.org/XML/"><abbr
372title="Extensible Markup Language">XML</abbr></a> format, and a variant
373<a href="https://tools.ietf.org/html/rfc7265">jCal</a>
374(Internet <abbr>RFC</abbr> 7265)
375uses <a href="https://www.json.org"><abbr
376title="JavaScript Object Notation">JSON</abbr></a> format.</li>
377</ul>
378</section>
379
380<section>
381<h2 id="compilers">Other <code><abbr>tz</abbr></code> compilers</h2>
382<p>Although some of these do not fully support
383<code><abbr>tz</abbr></code> data, in recent <code><abbr>tzdb</abbr></code>
384distributions you can generally work around compatibility problems by
385running the command <code>make rearguard_tarballs</code> and compiling
386from the resulting tarballs instead.</p>
387<ul>
388<li><a href="https://sourceforge.net/projects/vzic/">Vzic</a> is a <a
389href="https://en.wikipedia.org/wiki/C_%28programming_language%29">C</a>
390program that compiles
391<code><abbr>tz</abbr></code> source into iCalendar-compatible VTIMEZONE files.
392Vzic is freely
393available under the <a
394href="https://www.gnu.org/copyleft/gpl.html"><abbr>GNU</abbr>
395General Public License (<abbr
396title="General Public License">GPL</abbr>)</a>.</li>
397<li><a href="https://sourceforge.net/projects/tzical/">tziCal &ndash; tz
398database conversion utility</a> is like Vzic, except for the <a
399href="https://dotnet.microsoft.com">.NET framework</a>
400and with a <abbr>BSD</abbr>-style license.</li>
401<li><a
402href="https://metacpan.org/release/DateTime-TimeZone">DateTime::TimeZone</a>
403contains a script <code>parse_olson</code> that compiles
404<code><abbr>tz</abbr></code> source into <a href="https://www.perl.org">Perl</a>
405modules. It is part of the Perl <a
406href="https://github.com/houseabsolute/DateTime.pm/wiki">DateTime Project</a>,
407which is freely
408available under both the <abbr>GPL</abbr> and the Perl Artistic
409License. DateTime::TimeZone also contains a script
410<code>tests_from_zdump</code> that generates test cases for each clock
411transition in the <code><abbr>tz</abbr></code> database.</li>
412<li>The <a href="https://howardhinnant.github.io/date/tz.html">Time Zone
413Database Parser</a> is a
414<a href="https://en.wikipedia.org/wiki/C%2B%2B">C++</a> parser and
415runtime library with <a
416href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0355r7.html">API</a>
417adopted by
418<a href="https://en.wikipedia.org/wiki/C++20">C++20</a>,
419the current iteration of the C++ standard.
420It is freely available under the
421<abbr title="Massachusetts Institute of Technology">MIT</abbr> license.</li>
422<li><a id="ICU" href="http://site.icu-project.org">International Components for
423Unicode (<abbr>ICU</abbr>)</a> contains C/C++ and <a
424href="https://en.wikipedia.org/wiki/Java_%28programming_language%29">Java</a>
425libraries for internationalization that
426has a compiler from <code><abbr>tz</abbr></code> source
427and from <abbr title="Common Locale Data Repository">CLDR</abbr> data
428(mentioned <a href="#CLDR">below</a>)
429into an <abbr>ICU</abbr>-specific format.
430<abbr>ICU</abbr> is freely available under a
431<abbr>BSD</abbr>-style license.</li>
432<li>The <a href="https://github.com/lau/tzdata">Tzdata</a> package for
433the <a href="https://elixir-lang.org">Elixir</a> language downloads
434and compiles <code><abbr>tz</abbr></code> source and exposes <abbr
435title="Application Program Interface">API</abbr>s for use. It is
436freely available under the <abbr>MIT</abbr> license.</li>
437<li>Java-based compilers and libraries include:
438<ul>
439<li>The <a
440href="https://www.oracle.com/java/technologies/javase/tzupdater-readme.html">TZUpdater
441tool</a> compiles <code><abbr>tz</abbr></code> source into the format used by
442<a href="https://openjdk.java.net/">OpenJDK</a> and
443<a href="https://jdk.java.net/">Oracle JDK</a>.
444Although its source code is proprietary, its executable is available under the
445<a href="https://www.oracle.com/a/tech/docs/tzupdater-lic.html">Java SE
446Timezone Updater License Agreement</a>.</li>
447<li>The <a
448href="https://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html">Java
449SE 8 Date and Time</a> <abbr>API</abbr> can be supplemented by <a
450href="https://www.threeten.org/threeten-extra/">ThreeTen-Extra</a>,
451which is freely available under a <abbr>BSD</abbr>-style license.</li>
452<li><a href="https://www.joda.org/joda-time/">Joda-Time &ndash; Java date
453and time <abbr>API</abbr></a> contains a class
454<code>org.joda.time.tz.ZoneInfoCompiler</code> that compiles
455<code><abbr>tz</abbr></code> source into a binary format. It inspired
456Java 8 <code>java.time</code>, which its users should migrate to once
457they can assume Java 8 or later. It is available under the <a
458href="https://www.apache.org/licenses/LICENSE-2.0">Apache License</a>.</li>
459<li><a href="https://bell-sw.com/pages/iana-updater/">IANA Updater</a> and <a
460href="https://www.azul.com/products/open-source-tools/ziupdater-time-zone-tool/">ZIUpdater</a>
461are alternatives to TZUpdater. IANA Updater's license is unclear;
462ZIUpdater is licensed under the <abbr>GPL</abbr>.</li>
463<li><a href="https://github.com/MenoData/Time4A">Time4A: Advanced date and
464time library for Android</a> and
465<a href="https://github.com/MenoData/Time4J/">Time4J: Advanced date,
466time and interval library for Java</a> compile
467<code><abbr>tz</abbr></code> source into a binary format.
468Time4A is available under the Apache License and Time4J is
469available under the <a
470href="https://www.gnu.org/copyleft/lesser.html"><abbr>GNU</abbr> Lesser
471General Public License (<abbr title="Lesser General Public
472License">LGPL</abbr>)</a>.</li>
473<li><abbr>ICU</abbr> (mentioned <a href="#ICU">above</a>) contains compilers and
474Java-based libraries.</li>
475</ul>
476<li><a href="https://nodatime.org">Noda Time &ndash; Date and
477time <abbr>API</abbr> for .NET</a>
478is like Joda-Time and Time4J, but for the .NET framework instead of Java.
479It is freely available under the Apache License.</li>
480<li>Many modern
481<a href="https://en.wikipedia.org/wiki/JavaScript">JavaScript</a>
482runtimes support <code><abbr>tz</abbr></code> natively via the
483<samp>timeZone</samp> option of <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat"><samp>Intl.DateTimeFormat</samp></a>.
484This can be used as-is or with most of the following libraries,
485many of which also support runtimes lacking the <samp>timeZone</samp> option.
486<ul>
487<li>The <a
488href="https://github.com/formatjs/date-time-format-timezone"><samp>Intl.DateTimeFormat</samp>
489timezone polyfill</a>
490is freely available under a <abbr>BSD</abbr>-style license.</li>
491<li>The <a href="https://date-fns.org/">date-fns</a>
492library manipulates timezone-aware timestamps in browsers and
493in <a href="https://nodejs.org/en/">Node.js</a>.
494It is freely available under the <abbr>MIT</abbr> license.</li>
495<li><a href="https://github.com/iamkun/dayjs">Day.js</a> is a
496minimalist replacement for the date and time API of
497the <a href="https://momentjs.com/docs/">now-legacy Moment.js</a> date
498manipulation library.
499It is freely available under the <abbr>MIT</abbr> license.</li>
500<li><a href="https://moment.github.io/luxon/">Luxon</a> improves
501timezone support for the <samp>Intl</samp> API.
502It is freely available under the <abbr>MIT</abbr> license.</li>
503<li><a href="https://momentjs.com/timezone/">Moment Timezone</a> is a
504Moment.js plugin.
505It is freely available under the <abbr>MIT</abbr> license.</li>
506<li><a href="https://github.com/bigeasy/timezone">Timezone</a> is a
507JavaScript library that supports date arithmetic that is time zone
508aware. It is freely available under the <abbr>MIT</abbr> license.</li>
509<li><a href="https://www.npmjs.com/package/@tubular/time">@tubular/time</a>
510supports live <code><abbr>tzdb</abbr></code> updates,
511astronomical and atomic time, a command-line interface,
512and full <a
513href="https://en.wikipedia.org/wiki/TypeScript">TypeScript</a>.
514Its companion <a
515href="https://www.npmjs.com/package/@tubular/time-tzdb">@tubular/time-tzdb</a>
516can generate <abbr>TZif</abbr> and other files, and a companion website
517<a href="https://tzexplorer.org">Timezone Database Explorer</a> lets you
518convert timestamps, view transition histories, and download code and data.
519It is freely available under the <abbr>MIT</abbr> license.</li>
520</ul>
521The proposed <a
522href="https://github.com/tc39/proposal-temporal"><samp>Temporal</samp>
523objects</a> let programs access an abstract view of
524<code><abbr>tzdb</abbr></code> data, and are designed to replace <a
525href="https://codeofmatt.com/javascript-date-type-is-horribly-broken/">JavaScript's
526problematic <samp>Date</samp> objects</a> when working with dates and times.
527<li><a href="https://github.com/JuliaTime/">JuliaTime</a> contains a
528compiler from <code><abbr>tz</abbr></code> source into
529<a href="https://julialang.org/">Julia</a>. It is freely available
530under the <abbr>MIT</abbr> license.</li>
531<li><a href="https://github.com/pavkam/tzdb"><abbr>TZDB</abbr> &ndash;
532<abbr>IANA</abbr> Time Zone Database for Delphi/<abbr
533title="Free Pascal Compiler">FPC</abbr></a>
534compiles from <code><abbr>tz</abbr></code> source into
535<a href="https://en.wikipedia.org/wiki/Object_Pascal">Object Pascal</a>
536as compiled by <a href="https://en.wikipedia.org/wiki/Delphi_(IDE)">Delphi</a>
537and <a
538href="https://en.wikipedia.org/wiki/Free_Pascal"><abbr>FPC</abbr></a>.
539It is freely available under a <abbr>BSD</abbr>-style license.</li>
540<li><a href="http://pytz.sourceforge.net">pytz &ndash; World Timezone
541Definitions for Python</a> compiles <code><abbr>tz</abbr></code> source into
542<a href="https://www.python.org">Python</a>.
543It is freely available under a <abbr>BSD</abbr>-style license.
544In code that can assume Python 3.6 or later it is largely superseded; see <a
545href="https://blog.ganssle.io/articles/2018/03/pytz-fastest-footgun.html">pytz:
546The Fastest Footgun in the West</a>.</li>
547<li><a href="https://tzinfo.github.io">TZInfo &ndash;
548Ruby Timezone Library</a>
549compiles <code><abbr>tz</abbr></code> source into
550<a href="https://www.ruby-lang.org/en/">Ruby</a>.
551It is freely available under the <abbr>MIT</abbr> license.</li>
552<li>The <a href="http://www.squeaksource.com/Chronos/">Chronos Date/Time
553Library</a> is
554a <a href="https://en.wikipedia.org/wiki/Smalltalk">Smalltalk</a> class
555library that compiles <code><abbr>tz</abbr></code> source into a time
556zone repository whose format
557is either proprietary or an <abbr>XML</abbr>-encoded
558representation.</li>
559<li><a id="Tcl" href="https://tcl.tk">Tcl</a>
560contains a developer-oriented parser that compiles <code><abbr>tz</abbr></code>
561source into text files, along with a runtime that can read those
562files. Tcl is freely available under a <abbr>BSD</abbr>-style
563license.</li>
564</ul>
565</section>
566
567<section>
568<h2 id="TZif">Other <abbr>TZif</abbr> readers</h2>
569<ul>
570<li>The <a
571href="https://www.gnu.org/software/libc/"><abbr>GNU</abbr> C
572Library</a>
573has an independent, thread-safe implementation of
574a <abbr>TZif</abbr> file reader.
575This library is freely available under the LGPL
576and is widely used in <abbr>GNU</abbr>/Linux systems.</li>
577<li><a href="https://www.gnome.org">GNOME</a>'s
578<a href="https://developer.gnome.org/glib/">GLib</a> has
579a <abbr>TZif</abbr> file reader written in C that
580creates a <code>GTimeZone</code> object representing sets
581of <abbr>UT</abbr> offsets.
582It is freely available under the <abbr>LGPL</abbr>.</li>
583<li>The
584<a href="https://github.com/bloomberg/bde/wiki">BDE Standard Library</a>'s
585<code>baltzo::TimeZoneUtil</code> component contains a C++
586implementation of a <abbr>TZif</abbr> file reader. It is freely available under
587the Apache License.</li>
588<li><a href="https://github.com/google/cctz">CCTZ</a> is a simple C++
589library that translates between <abbr>UT</abbr> and civil time and
590can read <abbr>TZif</abbr> files. It is freely available under the Apache
591License.</li>
592<li><a href="https://github.com/derickr/timelib">Timelib</a> is a C
593library that reads <abbr>TZif</abbr> files and converts
594timestamps from one time zone or format to another.
595It is used by <a href="https://secure.php.net"><abbr
596title="PHP: Hypertext Preprocessor">PHP</abbr></a>,
597<a href="https://hhvm.com"><abbr title="HipHop Virtual Machine">HHVM</abbr></a>,
598and <a href="https://www.mongodb.com">MongoDB</a>.
599It is freely available under the <abbr>MIT</abbr> license.</li>
600<li>Tcl, mentioned <a href="#Tcl">above</a>, also contains a
601<abbr>TZif</abbr> file reader.</li>
602<li><a href="https://metacpan.org/pod/DateTime::TimeZone::Tzfile">
603DateTime::TimeZone::Tzfile</a>
604is a <abbr>TZif</abbr> file reader written in Perl.
605It is freely available under the same terms as Perl
606(dual <abbr>GPL</abbr> and Artistic license).</li>
607<li>Python has a <a id="python-zoneinfo"
608href="https://docs.python.org/3/library/zoneinfo.html"><code>zoneinfo.ZoneInfo</code>
609class</a> that reads <abbr>TZif</abbr> data and creates objects
610that represent <code><abbr>tzdb</abbr></code> timezones.
611Python is freely available under the
612<a href="https://docs.python.org/3/license.html">Python Software Foundation
613License</a>.
614A companion <a id="pypi-tzdata" href="https://pypi.org/">PyPI</a> module
615<a href="https://pypi.org/project/tzdata/"><code>tzdata</code></a>
616supplies TZif data if the underlying system data cannot be found;
617it is freely available under the Apache License.</li>
618<li>The
619public-domain <a href="https://github.com/dbaron/tz.js">tz.js</a>
620library contains a Python tool that
621converts <abbr>TZif</abbr> data into
622<abbr>JSON</abbr>-format data suitable for use
623in its JavaScript library for time zone conversion. Dates before 1970
624are not supported.</li>
625<li>The <a
626href="https://hackage.haskell.org/package/timezone-olson">timezone-olson</a>
627package contains <a href="https://www.haskell.org">Haskell</a> code that
628parses and uses <abbr>TZif</abbr> data. It is freely
629available under a <abbr>BSD</abbr>-style license.</li>
630</ul>
631</section>
632
633<section>
634<h2 id="software">Other <code><abbr>tz</abbr></code>-based time zone software</h2>
635<ul>
636<li><a href="https://foxclocks.org">FoxClocks</a>
637is an extension for <a href="https://www.google.com/chrome/">Google
638Chrome</a> and for <a
639href="https://wiki.mozilla.org/Modules/Toolkit">Mozilla
640Toolkit</a> applications like <a
641href="https://www.mozilla.org/en-US/firefox/new/">Firefox</a> and <a
642href="https://www.mozilla.org/en-US/thunderbird/">Thunderbird</a>.
643It displays multiple clocks in the application window, and has a mapping
644interface to <a href="https://www.google.com/earth/">Google Earth</a>.
645It is freely available under the <abbr>GPL</abbr>.</li>
646<li><a href="https://golang.org">Go programming language</a>
647implementations contain a copy of a 32-bit subset of a recent
648<code><abbr>tz</abbr></code> database in a
649Go-specific format.</li>
650<li>Microsoft Windows 8.1
651and later has <code><abbr>tz</abbr></code> data and <abbr>CLDR</abbr>
652data (mentioned <a href="#CLDR">below</a>) used by the
653<a href="https://en.wikipedia.org/wiki/Windows_Runtime">Windows Runtime</a> /
654<a href="https://en.wikipedia.org/wiki/Universal_Windows_Platform">Universal Windows Platform</a> classes
655<a href="https://docs.microsoft.com/uwp/api/Windows.Globalization.DateTimeFormatting.DateTimeFormatter"><code>DateTimeFormatter</code></a> and
656<a href="https://docs.microsoft.com/uwp/api/windows.globalization.calendar"><code>Calendar</code></a>.
657<a id="System.TimeZoneInfo"
658href="https://blogs.msdn.microsoft.com/bclteam/2007/06/07/exploring-windows-time-zones-with-system-timezoneinfo-josh-free/">Exploring
659Windows Time Zones with <code>System.TimeZoneInfo</code></a> describes
660the older, proprietary method of Microsoft Windows 2000 and later,
661which stores time zone data in the
662<a href="https://en.wikipedia.org/wiki/Windows_Registry">Windows Registry</a>. The
663<a
664href="https://unicode.org/cldr/charts/latest/supplemental/zone_tzid.html">Zone &rarr;
665Tzid table</a> or <a
666href="https://github.com/unicode-org/cldr/blob/master/common/supplemental/windowsZones.xml"><abbr>XML</abbr>
667file</a> of the <abbr>CLDR</abbr> data maps proprietary zone IDs
668to <code><abbr>tz</abbr></code> names.
669These mappings can be performed programmatically via the <a href="https://github.com/mj1856/TimeZoneConverter">TimeZoneConverter</a> .NET library,
670or the ICU Java and C++ libraries mentioned <a href="#ICU">above</a>.
671<li><a
672href="https://www.oracle.com/java/index.html">Oracle
673Java</a> contains a copy of a subset of a recent
674<code><abbr>tz</abbr></code> database in a
675Java-specific format.</li>
676</ul>
677</section>
678
679<section>
680<h2 id="other-dbs">Other time zone databases</h2>
681<ul>
682<li><a href="https://www.astro.com/atlas">Time-zone Atlas</a>
683is Astrodienst's Web version of Shanks and Pottenger's out-of-print
684time zone history atlases
685<a href="https://www.worldcat.org/oclc/468828649">for the US</a> and
686<a href="https://www.worldcat.org/oclc/76950459">for the world</a>.
687Although these extensive atlases
688<a href="https://astrologynewsservice.com/opinion/how-astrologers-contributed-to-the-information-age-a-brief-history-of-time/">were
689sources for much of the older <code><abbr>tz</abbr></code> data</a>,
690they are unreliable as Shanks appears to have
691guessed many <abbr>UT</abbr> offsets and transitions. The atlases cite no
692sources and do not indicate which entries are guesswork.</li>
693<li><a href="https://en.wikipedia.org/wiki/HP-UX">HP-UX</a> has a database in
694its own <code>tztab</code>(4) format.</li>
695<li>Microsoft Windows has proprietary data mentioned
696<a href="#System.TimeZoneInfo">above</a>.</li>
697<li><a href="https://www.worldtimeserver.com">World Time Server</a>
698is another time zone database.</li>
699<li>The <a
700href="https://www.iata.org/publications/store/Pages/standard-schedules-information.aspx">Standard
701Schedules Information Manual</a> of the
702International Air Transport Association
703gives current time zone rules for airports served by commercial aviation.</li>
704</ul>
705</section>
706
707<section>
708<h2 id="maps">Maps</h2>
709<ul>
710<li>The <a
711href="https://www.cia.gov/the-world-factbook/maps/world-regional/">World
712and Regional Maps section</a> of <em>The World Factbook</em>, published by the
713<a href="https://www.cia.gov">US Central Intelligence
714Agency (<abbr
715title="Central Intelligence Agency">CIA</abbr>)</a>, contains a time
716zone map; the
717<a
718href="https://legacy.lib.utexas.edu/maps/world.html">Perry&ndash;Casta&ntilde;eda
719Library Map Collection</a>
720of the University of Texas at Austin has copies of
721recent editions.
722The pictorial quality is good,
723but the maps do not indicate daylight saving time,
724and parts of the data are a few years out of date.</li>
725<li><a href="https://www.worldtimezone.com">World Time Zone Map
726with current time</a>
727has several fancy time zone maps; it covers Russia particularly well.
728The maps' pictorial quality is not quite as good as the
729<abbr>CIA</abbr>'s
730but the maps are more up to date.</li>
731<li><a
732href="https://blog.poormansmath.net/how-much-is-time-wrong-around-the-world/">How
733much is time wrong around the world?</a> maps the difference between
734mean solar and standard time, highlighting areas such as western China
735where the two differ greatly. It's a bit out of date, unfortunately.</li>
736</ul>
737</section>
738
739<section>
740<h2 id="boundaries">Time zone boundaries</h2>
741<p>Geographical boundaries between timezones are available
742from several <a
743href="https://en.wikipedia.org/wiki/Internet_geolocation">Internet
744geolocation</a>
745services and other sources.</p>
746<ul>
747<li><a href="https://github.com/evansiroky/timezone-boundary-builder">Timezone
748Boundary Builder</a> extracts
749<a href="https://www.openstreetmap.org">Open Street Map</a> data to build
750boundaries of <code><abbr>tzdb</abbr></code> timezones.
751Its code is freely available under the <abbr>MIT</abbr> license, and
752its data entries are freely available under the
753<a href="https://opendatacommons.org/licenses/odbl/">Open Data Commons
754Open Database License</a>. The maps' borders appear to be quite accurate.</li>
755<li>Programmatic interfaces that map geographical coordinates via tz_world to
756<code><abbr>tzdb</abbr></code> timezones include:
757<ul>
758<li><a href="https://github.com/mj1856/GeoTimeZone">GeoTimeZone</a> is
759written in <a
760href="https://en.wikipedia.org/wiki/C_Sharp_(programming_language)">C#</a>
761and is freely available under the <abbr>MIT</abbr> license.</li>
762<li>The <a href="https://github.com/bradfitz/latlong">latlong package</a>
763is written in Go and is freely available under the Apache License.</li>
764<li><a href="https://github.com/drtimcooper/LatLongToTimezone">LatLongToTimezone</a>,
765in both Java and
766<a href="https://en.wikipedia.org/wiki/Swift_(programming_language)">Swift</a>
767form, is freely available under the MIT license.</li>
768<li>For Node.js,
769the <a href="https://www.npmjs.com/package/geo-tz">geo-tz module</a>
770is freely available under the MIT license, and
771the <a href="https://www.npmjs.com/package/tz-lookup">tz-lookup module</a>
772is in the public domain.</li>
773<li>The <a
774href="https://github.com/MrMinimal64/timezonefinder">timezonefinder</a>
775library for Python is freely available under the MIT license.
776<li>The <a
777href="https://github.com/gunyarakun/timezone_finder">timezone_finder</a>
778library for Ruby is freely available under the MIT license.</li>
779</ul></li>
780<li>Free access via a network API, if you register a key, is provided by
781the <a
782href="https://www.geonames.org/export/web-services.html#timezone">GeoNames
783Timezone web service</a>, the <a
784href="https://developers.google.com/maps/documentation/timezone/intro">Google
785Maps Time Zone API</a>, and
786the <a href="https://timezonedb.com/api">TimeZoneDB API</a>.
787Commercial network API access is provided
788by <a href="https://askgeo.com">AskGeo</a>
789and <a href="https://www.geogarage.com/blog/news-1/post/geogarage-time-zone-api-31">GeoGarage</a>.
790</li>
791<li>"<a
792href="https://stackoverflow.com/questions/16086962/how-to-get-a-time-zone-from-a-location-using-latitude-and-longitude-coordinates/16086964">How
793to get a time zone from a location using latitude and longitude
794coordinates?</a>" discusses other geolocation possibilities.</li>
795<li><a href="http://statoids.com/statoids.html">Administrative
796Divisions of Countries ("Statoids")</a> lists
797political subdivision data related to time zones.</li>
798<li><a href="https://home.kpn.nl/vanadovv/time/Multizones.html">Time
799zone boundaries for multizone countries</a> summarizes legal
800boundaries between time zones within countries.</li>
801<li><a href="http://manifold.net/info/freestuff.shtml">Manifold Software
802&ndash; GIS and Database Tools</a> includes a Manifold-format map of
803world time zone boundaries distributed under the
804<abbr>GPL</abbr>.</li>
805<li>A ship within the <a
806href="https://en.wikipedia.org/wiki/Territorial_waters">territorial
807waters</a> of any nation uses that nation's time. In international
808waters, time zone boundaries are meridians 15&deg; apart, except that
809<abbr>UT</abbr>&minus;12 and <abbr>UT</abbr>+12 are each 7.5&deg;
810wide and are separated by
811the 180&deg; meridian (not by the International Date Line, which is
812for land and territorial waters only). A captain can change ship's
813clocks any time after entering a new time zone; midnight changes are
814common.</li>
815</ul>
816</section>
817
818<section>
819<h2 id="civil">Civil time concepts and history</h2>
820<ul>
821<li><a href="https://www.nist.gov/pml/time-and-frequency-division/popular-links/walk-through-time">A
822Walk through Time</a>
823surveys the evolution of timekeeping.</li>
824<li>The history of daylight saving time is surveyed in <a
825href="http://www.webexhibits.org/daylightsaving/">About Daylight
826Saving Time &ndash; History, rationale, laws &amp; dates</a> and summarized in
827<a href="http://seizethedaylight.com/dst/">A Brief
828History of Daylight Saving Time</a>.</li>
829<li><a href="https://www.laphamsquarterly.org/roundtable/time-lords">Time
830Lords</a> discusses how authoritarians manipulate civil time.</li>
831<li><a href="https://www.w3.org/TR/timezone/">Working with Time Zones</a>
832contains guidelines and best practices for software applications that
833deal with civil time.</li>
834<li><a href="https://www.staff.science.uu.nl/~gent0113/idl/idl.htm">A History of
835the International Date Line</a> tells the story of the most important
836time zone boundary.</li>
837<li><a href="http://statoids.com/tconcept.html">Basic Time
838Zone Concepts</a> discusses terminological issues behind time zones.</li>
839</ul>
840</section>
841
842<section>
843<h2 id="national">National histories of legal time</h2>
844<dl>
845<dt>Australia</dt>
846<dd>The Parliamentary Library commissioned a <a
847href="https://www.aph.gov.au/binaries/library/pubs/rp/2009-10/10rp10.pdf">research
848paper on daylight saving time in Australia</a>.
849The Bureau of Meteorology publishes a list of <a
850href="http://www.bom.gov.au/climate/averages/tables/dst_times.shtml">Implementation
851Dates of Daylight Savings Time within Australia</a>.</dd>
852<dt>Belgium</dt>
853<dd>The Royal Observatory of Belgium maintains a table of time in
854Belgium (in
855<a href="https://www.astro.oma.be/GENERAL/INFO/nli001a.html"
856hreflang="nl">Dutch</a> and <a
857href="https://www.astro.oma.be/GENERAL/INFO/fri001a.html"
858hreflang="fr">French</a>).</dd>
859<dt>Brazil</dt>
860<dd>The Time Service Department of the National Observatory
861records <a href="http://pcdsh01.on.br/DecHV.html"
862hreflang="pt-BR">Brazil's daylight saving time decrees (in
863Portuguese)</a>.</dd>
864<dt>Canada</dt>
865<dd>National Research Council Canada publishes current
866and some older information about <a
867href="https://nrc.canada.ca/en/certifications-evaluations-standards/canadas-official-time/time-zones-daylight-saving-time">time
868zones and daylight saving time</a>.</dd>
869<dt>Chile</dt>
870<dd>The Hydrographic and Oceanographic Service of the Chilean Navy publishes a
871<a href="https://www.horaoficial.cl/historia_hora.php" hreflang="es">history of
872Chile's official time (in Spanish)</a>.</dd>
873<dt>China</dt>
874<dd>The Hong Kong Observatory maintains a
875<a href="https://www.hko.gov.hk/en/gts/time/Summertime.htm">history of
876 summer time in Hong Kong</a>,
877and Macau's Meteorological and Geophysical Bureau maintains a <a
878href="https://www.smg.gov.mo/en/subpage/224/page/174">similar
879history for Macau</a>.
880Unfortunately the latter is incomplete and has errors.</dd>
881<dt>Czech Republic</dt>
882<dd><a href="https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas"
883hreflang="cs">When daylight saving time starts and ends (in Czech)</a>
884summarizes and cites historical <abbr>DST</abbr> regulations.</dd>
885<dt>Germany</dt>
886<dd>The National Institute for Science and Technology maintains the <a
887href="https://www.ptb.de/cms/en/fachabteilungen/abt4/fb-44/ag-441/realisation-of-legal-time-in-germany.html">Realisation
888of Legal Time in Germany</a>.</dd>
889<dt>Israel</dt>
890<dd>The Interior Ministry periodically issues <a
891href="ftp://ftp.cs.huji.ac.il/pub/tz/announcements"
892hreflang="he">announcements (in Hebrew)</a>.</dd>
893<dt>Malaysia</dt>
894<dd>See Singapore <a href="#Singapore">below</a>.</dd>
895<dt>Mexico</dt>
896<dd>The Investigation and Analysis Service of the Mexican Library of
897Congress has published a <a
898href="http://www.diputados.gob.mx/bibliot/publica/inveyana/polisoc/horver/index.htm"
899hreflang="es">history of Mexican local time (in Spanish)</a>.</dd>
900<dt>Netherlands</dt>
901<dd><a href="https://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm"
902hreflang="nl">Legal time in the Netherlands (in Dutch)</a>
903covers the history of local time in the Netherlands from ancient times.</dd>
904<dt>New Zealand</dt>
905<dd>The Department of Internal Affairs maintains a brief <a
906href="https://www.dia.govt.nz/Daylight-Saving-History">History of
907Daylight Saving</a>.</dd>
908<dt>Portugal</dt>
909<dd>The Lisbon Astronomical Observatory publishes a
910<a href="https://oal.ul.pt/hora-legal/" hreflang="pt">history of
911legal time (in Portuguese)</a>.</dd>
912<dt>Singapore</dt>
913<dd><a id="Singapore"
914href="https://web.archive.org/web/20190822231045/http://www.math.nus.edu.sg/~mathelmr/teaching/timezone.html">Why
915is Singapore in the "Wrong" Time Zone?</a> details the
916history of legal time in Singapore and Malaysia.</dd>
917<dt>United Kingdom</dt>
918<dd><a
919href="https://www.polyomino.org.uk/british-time/">History of
920legal time in Britain</a> discusses in detail the country
921with perhaps the best-documented history of clock adjustments.</dd>
922<dt>United States</dt>
923<dd>The Department of Transportation's <a
924href="https://www.transportation.gov/regulations/recent-time-zone-proceedings">Recent
925Time Zone Proceedings</a> lists changes to time zone boundaries.</dd>
926<dt>Uruguay</dt>
927<dd>The Oceanography, Hydrography, and Meteorology Service of the Uruguayan
928Navy (SOHMA) publishes an annual <a
929href="http://sohma.armada.mil.uy/index.php/servicios/datos-astronomicos" hreflang="es">almanac
930(in Spanish)</a>.</dd>
931</dl>
932</section>
933
934<section>
935<h2 id="costs">Costs and benefits of time shifts</h2>
936<p>Various sources argue for and against daylight saving time and time
937zone shifts, and many scientific studies have been conducted. This
938section summarizes reviews and position statements based on
939scientific literature in the area.</p>
940<ul>
941<li>Carey RN, Sarma KM.
942<a href="https://bmjopen.bmj.com/content/7/6/e014319.long">Impact of
943daylight saving time on road traffic collision risk: a systematic
944review</a>.
945<em>BMJ Open.</em> 2017;7(6):e014319. doi:<a href="https://doi.org/10.1136/bmjopen-2016-014319">10.1136/bmjopen-2016-014319</a>.
946This reviews research literature and concludes that the evidence
947neither supports nor refutes road safety benefits from
948shifts in time zones.</li>
949<li>Havranek T, Herman D, Irsova D.
950<a href="https://www.econstor.eu/handle/10419/174191">Does daylight
951saving save electricity? A meta-analysis</a>. <em>Energy J.</em>
9522018;39(2).
953doi:<a href="https://doi.org/10.5547/01956574.39.2.thav">10.5547/01956574.39.2.thav</a>.
954This analyzes research literature and concludes, "Electricity savings
955are larger for countries farther away from the equator, while
956subtropical regions consume more electricity because of <abbr>DST</abbr>."</li>
957<li>Rishi MA, Ahmed O, Barrantes Perez JH <em>et al</em>.
958<a href="https://jcsm.aasm.org/doi/10.5664/jcsm.8780">Daylight saving time:
959an American Academy of Sleep Medicine position statement</a>.
960<em>J Clin Sleep Med.</em>
9612020;<a href="https://doi.org/10.5664/jcsm.8780">10.5664/jcsm.8780</a>.
962This argues for permanent standard time due to health risks of both
963<abbr>DST</abbr> transitions and permanent <abbr>DST</abbr>.</li>
964<li>Roenneberg T, Winnebeck EC, Klerman EB.
965<a href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6692659/">Daylight
966saving time and artificial time zones &ndash; a battle between
967biological and social times</a>. <em>Front Physiol.</em> 2019;10:944.
968doi:<a href="https://doi.org/10.3389/fphys.2019.00944">10.3389/fphys.2019.00944</a>.
969This reviews evidence about the health effects of <abbr>DST</abbr>
970and concludes,
971"In summary, the scientific literature strongly argues against the
972switching between <abbr>DST</abbr> and Standard Time and even more so against
973adopting <abbr>DST</abbr> permanently."</li>
974</ul>
975</section>
976
977<section>
978<h2 id="precision">Precision timekeeping</h2>
979<ul>
980<li><a
981href="http://leapsecond.com/hpan/an1289.pdf">The
982Science of Timekeeping</a> is a thorough introduction
983to the theory and practice of precision timekeeping.</li>
984<li><a href="https://doi.org/10.1007/978-3-319-59909-0">The Science of
985Time 2016</a> contains several freely-readable papers.</li>
986<li><a href="http://www.ntp.org"><abbr
987title="Network Time Protocol">NTP</abbr>: The Network
988Time Protocol</a> (Internet <abbr>RFC</abbr> 5905)
989discusses how to synchronize clocks of
990Internet hosts.</li>
991<li>The <a href="https://www.usenix.org/system/files/conference/nsdi18/nsdi18-geng.pdf"><span style="font-variant: small-caps">Huygens</span></a>
992family of software algorithms can achieve accuracy to a few tens of
993nanoseconds in scalable server farms without special hardware.</li>
994<li>The <a
995href="https://www.nist.gov/intelligent-systems-division/ieee-1588">Precision
996Time Protocol</a> (<abbr
997title="Institute of Electrical and Electronics Engineers">IEEE</abbr> 1588)
998can achieve submicrosecond clock accuracy on a local area network
999with special-purpose hardware.</li>
1000<li><a
1001href="https://tools.ietf.org/html/rfc4833">Timezone
1002Options for <abbr title="Dynamic Host Configuration Protocol">DHCP</abbr></a>
1003(Internet <abbr>RFC</abbr> 4833)
1004specifies a <a
1005href="https://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol"><abbr>DHCP</abbr></a>
1006option for a server to configure
1007a client's time zone and daylight saving settings automatically.</li>
1008<li><a href="https://www.ucolick.org/~sla/leapsecs/timescales.html">Time
1009Scales</a> describes astronomical time scales like
1010<abbr title="Terrestrial Dynamic Time">TDT</abbr>,
1011<abbr title="Geocentric Coordinate Time">TCG</abbr>, and
1012<abbr title="Barycentric Dynamic Time">TDB</abbr>.
1013<li>The <a href="https://www.iau.org"><abbr
1014title="International Astronomical Union">IAU</abbr></a>'s <a
1015href="http://www.iausofa.org"><abbr
1016title="Standards Of Fundamental Astronomy">SOFA</abbr></a>
1017collection contains C and <a
1018href="https://en.wikipedia.org/wiki/Fortran">Fortran</a>
1019code for converting among time scales like
1020<abbr title="International Atomic Time">TAI</abbr>,
1021<abbr>TDB</abbr>, <abbr>TDT</abbr> and
1022<abbr>UTC</abbr>.</li>
1023<li><a
1024href="https://www.giss.nasa.gov/tools/mars24/help/notes.html">Mars24 Sunclock
1025&ndash; Time on Mars</a> describes Airy Mean Time (<abbr>AMT</abbr>) and the
1026diverse local time
1027scales used by each landed mission on Mars.</li>
1028<li><a href="http://leapsecond.com">LeapSecond.com</a> is
1029dedicated not only to leap seconds but to precise time and frequency
1030in general. It covers the state of the art in amateur timekeeping, and
1031how the art has progressed over the past few decades.</li>
1032<li>The rules for leap seconds are specified in Annex 1 (Time scales) of <a
1033href="https://www.itu.int/rec/R-REC-TF.460-6-200202-I/">Standard-frequency
1034and time-signal emissions</a>, International Telecommunication Union &ndash;
1035Radiocommunication Sector (ITU-R) Recommendation TF.460-6 (02/2002).</li>
1036<li><a
1037href="https://www.iers.org/IERS/EN/Publications/Bulletins/bulletins.html"><abbr
1038title="International Earth Rotation and Reference Systems Service">IERS</abbr>
1039Bulletins</a> contains official publications of the International
1040Earth Rotation and Reference Systems Service, which decides when leap
1041seconds occur. The <code><abbr>tz</abbr></code> code and data support leap seconds
1042via an optional "<code>right</code>" configuration where a computer's internal
1043<code>time_t</code> integer clock counts every <abbr>TAI</abbr> second,
1044as opposed to the default "<code>posix</code>" configuration
1045where the internal clock ignores leap seconds.
1046The two configurations agree for timestamps starting with 1972-01-01 00:00:00
1047<abbr>UTC</abbr> (<code>time_t</code> 63&thinsp;072&thinsp;000) and diverge for
1048timestamps starting with <code>time_t</code> 78&thinsp;796&thinsp;800,
1049which corresponds to the first leap second
10501972-06-30 23:59:60 <abbr>UTC</abbr> in the "<code>right</code>" configuration,
1051and to
10521972-07-01 00:00:00 <abbr>UTC</abbr> in the "<code>posix</code>" configuration.
1053In practice the two configurations also agree for timestamps before
10541972 even though the historical situation is messy, partly because
1055neither <abbr>UTC</abbr> nor <abbr>TAI</abbr>
1056is well-defined for sufficiently-old timestamps.</li>
1057<li><a href="https://developers.google.com/time/smear">Leap Smear</a>
1058discusses how to gradually adjust <abbr>POSIX</abbr> clocks near a
1059leap second so that they disagree with <abbr>UTC</abbr> by at most a
1060half second, even though every <abbr>POSIX</abbr> minute has exactly
1061sixty seconds. This approach works with the default <code><abbr>tz</abbr></code>
1062"<code>posix</code>" configuration, is <a
1063href="http://bk1.ntp.org/ntp-stable/README.leapsmear">supported</a> by
1064the <abbr>NTP</abbr> reference implementation, <a
1065href="https://github.com/google/unsmear">supports</a> conversion between
1066<abbr>UTC</abbr> and smeared <abbr>POSIX</abbr> timestamps, and is used by major
1067cloud service providers. However, according to
1068<a href="https://tools.ietf.org/html/rfc8633#section-3.7.1">&sect;3.7.1 of
1069Network Time Protocol Best Current Practices</a>
1070(Internet <abbr>RFC</abbr> 8633), leap smearing is not suitable for
1071applications requiring accurate <abbr>UTC</abbr> or civil time,
1072and is intended for use only in single, well-controlled environments.</li>
1073<li>The <a
1074href="https://pairlist6.pair.net/mailman/listinfo/leapsecs">Leap
1075Second Discussion List</a> covers <a
1076href="https://www2.unb.ca/gge/Resources/gpsworld.november99.pdf">McCarthy
1077and Klepczynski's 1999 proposal to discontinue leap seconds</a>,
1078discussed further in
1079<a href="https://www.cl.cam.ac.uk/~mgk25/time/metrologia-leapsecond.pdf">The
1080leap second: its history and possible future</a>.
1081<a href="https://www.ucolick.org/~sla/leapsecs/"><abbr>UTC</abbr>
1082might be redefined
1083without Leap Seconds</a> gives pointers on this
1084contentious issue, which was active until 2015 and could become active
1085again.</li>
1086</ul>
1087</section>
1088
1089<section>
1090<h2 id="notation">Time notation</h2>
1091<ul>
1092<li>The <a id="CLDR" href="http://cldr.unicode.org">Unicode Common Locale Data
1093Repository (<abbr>CLDR</abbr>) Project</a> has localizations for time
1094zone names, abbreviations, identifiers, and formats. For example, it
1095contains French translations for "Eastern European Summer Time",
1096"<abbr title="Eastern European Summer Time">EEST</abbr>", and
1097"Bucharest". Its
1098<a href="https://unicode.org/cldr/charts/latest/by_type/">by-type
1099charts</a> show these values for many locales. Data values are available in
1100both <abbr title="Locale Data Markup Language">LDML</abbr>
1101(an <abbr>XML</abbr> format) and <abbr>JSON</abbr>.
1102<li>
1103<a href="https://www.cl.cam.ac.uk/~mgk25/iso-time.html">A summary of
1104the international standard date and time notation</a> covers
1105<a
1106href="https://www.iso.org/standard/70907.html"><em><abbr
1107title="International Organization for Standardization">ISO</abbr>
11088601-1:2019 &ndash; Date and time &ndash; Representations for information
1109interchange &ndash; Part 1: Basic rules</em></a>.</li>
1110<li>
1111<a href="https://www.w3.org/TR/xmlschema/#dateTime"><abbr>XML</abbr>
1112Schema: Datatypes &ndash; dateTime</a> specifies a format inspired by
1113<abbr>ISO</abbr> 8601 that is in common use in <abbr>XML</abbr> data.</li>
1114<li><a href="https://tools.ietf.org/html/rfc5322#section-3.3">&sect;3.3 of
1115Internet Message Format</a> (Internet <abbr>RFC</abbr> 5322)
1116specifies the time notation used in email and <a
1117href="https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol"><abbr>HTTP</abbr></a>
1118headers.</li>
1119<li>
1120<a href="https://tools.ietf.org/html/rfc3339">Date and Time
1121on the Internet: Timestamps</a> (Internet <abbr>RFC</abbr> 3339)
1122specifies an <abbr>ISO</abbr> 8601
1123profile for use in new Internet
1124protocols.</li>
1125<li>
1126<a href="https://web.archive.org/web/20190130042457/https://www.hackcraft.net/web/datetime/">Date &amp; Time
1127Formats on the Web</a> surveys web- and Internet-oriented date and time
1128formats.</li>
1129<li>Alphabetic time zone abbreviations should not be used as unique
1130identifiers for <abbr>UT</abbr> offsets as they are ambiguous in
1131practice. For example, in English-speaking North America
1132"<abbr>CST</abbr>" denotes 6 hours behind <abbr>UT</abbr>,
1133but in China it denotes 8 hours ahead of <abbr>UT</abbr>,
1134and French-speaking North Americans prefer
1135"<abbr title="Heure Normale du Centre">HNC</abbr>" to
1136"<abbr>CST</abbr>". The <code><abbr>tz</abbr></code>
1137database contains English abbreviations for many timestamps;
1138unfortunately some of these abbreviations were merely the database maintainers'
1139inventions, and these have been removed when possible.</li>
1140<li>Numeric time zone abbreviations typically count hours east of
1141<abbr>UT</abbr>, e.g., +09 for Japan and
1142&minus;10 for Hawaii. However, the <abbr>POSIX</abbr>
1143<code><abbr>TZ</abbr></code> environment variable uses the opposite convention.
1144For example, one might use <code><abbr>TZ</abbr>="<abbr
1145title="Japan Standard Time">JST</abbr>-9"</code> and
1146<code><abbr>TZ</abbr>="<abbr title="Hawaii Standard Time">HST</abbr>10"</code>
1147for Japan and Hawaii, respectively. If the
1148<code><abbr>tz</abbr></code> database is available, it is usually better to use
1149settings like <code><abbr>TZ</abbr>="Asia/Tokyo"</code> and
1150<code><abbr>TZ</abbr>="Pacific/Honolulu"</code> instead, as this should avoid
1151confusion, handle old timestamps better, and insulate you better from
1152any future changes to the rules. One should never set
1153<abbr>POSIX</abbr> <code><abbr>TZ</abbr></code> to a value like
1154<code>"GMT-9"</code>, though, since this would incorrectly imply that
1155local time is nine hours ahead of <abbr>UT</abbr> and the time zone
1156is called "<abbr>GMT</abbr>".</li>
1157</ul>
1158</section>
1159
1160<section>
1161<h2 id="see-also">See also</h2>
1162<ul>
1163<li><a href="theory.html">Theory and pragmatics of the
1164<code><abbr>tz</abbr></code> code and data</a></li>
1165<li><a href="tz-art.html">Time and the Arts</a></li>
1166</ul>
1167</section>
1168
1169<footer>
1170<hr>
1171This web page is in the public domain, so clarified as of
11722009-05-17 by Arthur David Olson.
1173<br>
1174Please send corrections to this web page to the
1175<a href="mailto:tz@iana.org">time zone mailing list</a>.
1176</footer>
1177</body>
1178</html>
1179