Home | History | Annotate | Line # | Download | only in time
      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4   <title>Theory and pragmatics of the tz code and data</title>
      5   <meta charset="UTF-8">
      6   <meta name="viewport" content="width=device-width, initial-scale=1">
      7   <style>
      8     dd {margin-left: 1.3rem;}
      9     pre {margin-left: 1.3rem; overflow: auto;}
     10     ul {padding-left: 1.3rem;}
     11   </style>
     12 </head>
     13 
     14 <body>
     15 <h1>Theory and pragmatics of the <code><abbr>tz</abbr></code> code and data</h1>
     16   <nav>
     17     <ul>
     18       <li><a href="#scope">Scope of the <code><abbr>tz</abbr></code>
     19 	  database</a></li>
     20       <li><a href="#naming">Timezone identifiers</a></li>
     21       <li><a href="#abbreviations">Time zone abbreviations</a></li>
     22       <li><a href="#accuracy">Accuracy of the <code><abbr>tz</abbr></code>
     23 	  database</a></li>
     24       <li><a href="#functions">Time and date functions</a></li>
     25       <li><a href="#stability">Interface stability</a></li>
     26       <li><a href="#leapsec">Leap seconds</a></li>
     27       <li><a href="#calendar">Calendrical issues</a></li>
     28       <li><a href="#planets">Time and time zones off earth</a></li>
     29     </ul>
     30   </nav>
     31 
     32 <section>
     33   <h2 id="scope">Scope of the <code><abbr>tz</abbr></code> database</h2>
     34 <p>
     35 The <a
     36 href="https://www.iana.org/time-zones"><code><abbr>tz</abbr></code>
     37 database</a> attempts to record the history and predicted future of
     38 civil time scales.
     39 It organizes <a href="tz-link.html">time zone and daylight saving time
     40 data</a> by partitioning the world into <a
     41 href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones"><dfn>timezones</dfn></a>
     42 whose clocks all agree about timestamps that occur after the <a
     43 href="https://en.wikipedia.org/wiki/Unix_time">POSIX Epoch</a>
     44 (1970-01-01 00:00:00 <a
     45 href="https://en.wikipedia.org/wiki/Coordinated_Universal_Time"><abbr
     46 title="Coordinated Universal Time">UTC</abbr></a>).
     47 Although 1970 is a somewhat-arbitrary cutoff, there are significant
     48 challenges to moving the cutoff earlier even by a decade or two, due
     49 to the wide variety of local practices before computer timekeeping
     50 became prevalent.
     51 Most timezones correspond to a notable location and the database
     52 records all known clock transitions for that location;
     53 some timezones correspond instead to a fixed <abbr>UTC</abbr> offset.
     54 </p>
     55 
     56 <p>
     57 Each timezone typically corresponds to a geographical region that is
     58 smaller than a traditional time zone, because clocks in a timezone
     59 all agree after 1970 whereas a traditional time zone merely
     60 specifies current standard time. For example, applications that deal
     61 with current and future timestamps in the traditional North
     62 American mountain time zone can choose from the timezones
     63 <code>America/Denver</code> which observes US-style daylight saving
     64 time (<abbr>DST</abbr>),
     65 and <code>America/Phoenix</code> which does not observe <abbr>DST</abbr>.
     66 Applications that also deal with past timestamps in the mountain time
     67 zone can choose from over a dozen timezones, such as
     68 <code>America/Boise</code>, <code>America/Edmonton</code>, and
     69 <code>America/Hermosillo</code>, each of which currently uses mountain
     70 time but differs from other timezones for some timestamps after 1970.
     71 </p>
     72 
     73 <p>
     74 Clock transitions before 1970 are recorded for location-based timezones,
     75 because most systems support timestamps before 1970 and could
     76 misbehave if data entries were omitted for pre-1970 transitions.
     77 However, the database is not designed for and does not suffice for
     78 applications requiring accurate handling of all past times everywhere,
     79 as it would take far too much effort and guesswork to record all
     80 details of pre-1970 civil timekeeping.
     81 Although some information outside the scope of the database is
     82 collected in a file <code>backzone</code> that is distributed along
     83 with the database proper, this file is less reliable and does not
     84 necessarily follow database guidelines.
     85 </p>
     86 
     87 <p>
     88 As described below, reference source code for using the
     89 <code><abbr>tz</abbr></code> database is also available.
     90 The <code><abbr>tz</abbr></code> code is upwards compatible with <a
     91 href="https://en.wikipedia.org/wiki/POSIX">POSIX</a>, an international
     92 standard for <a
     93 href="https://en.wikipedia.org/wiki/Unix">UNIX</a>-like systems.
     94 As of this writing, the current edition of POSIX is
     95 <a href="https://pubs.opengroup.org/onlinepubs/9799919799/">POSIX.1-2024</a>
     96 (The Open Group Base Specifications Issue 8, IEEE Std 1003.1-2024).
     97 Unlike its predecessors
     98 <a href="https://archive.org/details/POSIX.1-1988">POSIX.1-1988</a> through
     99 <a href="https://pubs.opengroup.org/onlinepubs/9699919799/">POSIX.1-2017</a>,
    100 POSIX.1-2024 requires support for the
    101 <code><abbr>tz</abbr></code> database, which has a
    102 model for describing civil time that is more complex than the
    103 standard and daylight saving times required by earlier POSIX editions.
    104 A <code><abbr>tz</abbr></code> timezone corresponds to a ruleset that can
    105 have more than two changes per year, these changes need not merely
    106 flip back and forth between two alternatives, and the rules themselves
    107 can change at times.
    108 Whether and when a timezone changes its clock,
    109 and even the timezones notional base offset from <abbr>UTC</abbr>,
    110 are variable.
    111 It does not always make sense to talk about a timezones
    112 base offset, which is not necessarily a single number.
    113 </p>
    114 
    115 </section>
    116 
    117 <section>
    118   <h2 id="naming">Timezone identifiers</h2>
    119 <p>
    120 Each timezone has a name that uniquely identifies the timezone.
    121 Inexperienced users are not expected to select these names unaided.
    122 Distributors should provide documentation and/or a simple selection
    123 interface that explains each name via a map or via descriptive text like
    124 Czech Republic instead of the timezone name <code>Europe/Prague</code>.
    125 If geolocation information is available, a selection interface can
    126 locate the user on a timezone map or prioritize names that are
    127 geographically close. For an example selection interface, see the
    128 <code>tzselect</code> program in the <code><abbr>tz</abbr></code> code.
    129 Unicodes <a href="https://cldr.unicode.org">Common Locale Data
    130 Repository (<abbr>CLDR</abbr>)</a>
    131 contains data that may be useful for other selection
    132 interfaces; it maps timezone names like <code>Europe/Prague</code> to
    133 locale-dependent strings like Prague, Praha, , and .
    134 </p>
    135 
    136 <p>
    137 The naming conventions attempt to strike a balance
    138 among the following goals:
    139 </p>
    140 
    141 <ul>
    142   <li>
    143     Uniquely identify every timezone where clocks have agreed since 1970.
    144     This is essential for the intended use: static clocks keeping local
    145     civil time.
    146   </li>
    147   <li>
    148     Indicate to experts where the timezones clocks typically are.
    149   </li>
    150   <li>
    151     Be robust in the presence of political changes.
    152     For example, names are typically not tied to countries, to avoid
    153     incompatibilities when countries change their name (e.g.,
    154     SwazilandEswatini) or when locations change countries (e.g., Hong
    155     Kong from UK colony to China).
    156     There is no requirement that every country or national
    157     capital must have a timezone name.
    158   </li>
    159   <li>
    160     Be portable to a wide variety of implementations.
    161   </li>
    162   <li>
    163     Use a consistent naming conventions over the entire world.
    164   </li>
    165 </ul>
    166 
    167 <p>
    168 Names normally have the format
    169 <var>AREA</var><code>/</code><var>LOCATION</var>, where
    170 <var>AREA</var> is a continent or ocean, and
    171 <var>LOCATION</var> is a specific location within the area.
    172 North and South America share the same area, <code>America</code>.
    173 Typical names are <code>Africa/Cairo</code>,
    174 <code>America/New_York</code>, and <code>Pacific/Honolulu</code>.
    175 Some names are further qualified to help avoid confusion; for example,
    176 <code>America/Indiana/Petersburg</code> distinguishes Petersburg,
    177 Indiana from other Petersburgs in America.
    178 </p>
    179 
    180 <p>
    181 Here are the general guidelines used for
    182 choosing timezone names,
    183 in decreasing order of importance:
    184 </p>
    185 
    186 <ul>
    187   <li>
    188     Use only valid POSIX file name components (i.e., the parts of
    189     names other than "<code>/</code>").
    190     Do not use the file name components "<code>.</code>" and
    191     "<code>..</code>".
    192     Within a file name component, use only <a
    193     href="https://en.wikipedia.org/wiki/ASCII">ASCII</a> letters,
    194     "<code>.</code>", "<code>-</code>" and "<code>_</code>".
    195     Do not use digits, as that might create an ambiguity with <a
    196     href="https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap08.html#tag_08_03">POSIXs
    197     proleptic <code>TZ</code> strings</a>.
    198     A file name component must not exceed 14 characters or start with
    199     "<code>-</code>".
    200     E.g., prefer <code>America/Noronha</code> to
    201     <code>America/Fernando_de_Noronha</code>.
    202     Exceptions: see the discussion of legacy names below.
    203   </li>
    204   <li>
    205     A name must not be empty, or contain "<code>//</code>", or
    206     start or end with "<code>/</code>".
    207     Also, a name must not be "<code>Etc/Unknown</code>", as
    208     <abbr>CLDR</abbr> uses that string for an unknown or invalid timezone.
    209   </li>
    210   <li>
    211     Do not use names that differ only in case.
    212     Although the reference implementation is case-sensitive, some
    213     other implementations are not, and they would mishandle names
    214     differing only in case.
    215   </li>
    216   <li>
    217     If one name <var>A</var> is an initial prefix of another
    218     name <var>AB</var> (ignoring case), then <var>B</var> must not
    219     start with "<code>/</code>", as a regular file cannot have the
    220     same name as a directory in POSIX.
    221     For example, <code>America/New_York</code> precludes
    222     <code>America/New_York/Bronx</code>.
    223   </li>
    224   <li>
    225     Uninhabited regions like the North Pole and Bouvet Island
    226     do not need locations, since local time is not defined there.
    227   </li>
    228   <li>
    229     If all clocks in a region have agreed since 1970,
    230     give them just one name even if some of the clocks disagreed before 1970,
    231     or reside in different countries or in notable or faraway locations.
    232     Otherwise these tables would become annoyingly large.
    233     For example, do not create a name <code>Indian/Crozet</code>
    234     as a near-duplicate or alias of <code>Asia/Dubai</code>
    235     merely because they are different countries or territories,
    236     or their clocks disagreed before 1970, or the
    237     <a href="https://en.wikipedia.org/wiki/Crozet_Islands">Crozet Islands</a>
    238     are notable in their own right,
    239     or the Crozet Islands are not adjacent to other locations
    240     that use <code>Asia/Dubai</code>.
    241   </li>
    242   <li>
    243     If boundaries between regions are fluid, such as during a war or
    244     insurrection, do not bother to create a new timezone merely
    245     because of yet another boundary change. This helps prevent table
    246     bloat and simplifies maintenance.
    247   </li>
    248   <li>
    249     If a name is ambiguous, use a less ambiguous alternative;
    250     e.g., many cities are named San Jos and Georgetown, so
    251     prefer <code>America/Costa_Rica</code> to
    252     <code>America/San_Jose</code> and <code>America/Guyana</code>
    253     to <code>America/Georgetown</code>.
    254   </li>
    255   <li>
    256     Keep locations compact.
    257     Use cities or small islands, not countries or regions, so that any
    258     future changes do not split individual locations into different
    259     timezones.
    260     E.g., prefer <code>Europe/Paris</code> to <code>Europe/France</code>,
    261     since
    262     <a href="https://en.wikipedia.org/wiki/Time_in_France#History">France
    263     has had multiple time zones</a>.
    264   </li>
    265   <li>
    266     Use mainstream English spelling, e.g., prefer
    267     <code>Europe/Rome</code> to <code>Europa/Roma</code>, and
    268     prefer <code>Europe/Athens</code> to the Greek
    269     <code>/</code> or the Romanized
    270     <code>Evrpi/Athna</code>.
    271     The POSIX file name restrictions encourage this guideline.
    272   </li>
    273   <li>
    274     Use the most populous among locations in a region,
    275     e.g., prefer <code>Asia/Shanghai</code> to
    276     <code>Asia/Beijing</code>.
    277     Among locations with similar populations, pick the best-known
    278     location, e.g., prefer <code>Europe/Rome</code> to
    279     <code>Europe/Milan</code>.
    280   </li>
    281   <li>
    282     Use the singular form, e.g., prefer <code>Atlantic/Canary</code> to
    283     <code>Atlantic/Canaries</code>.
    284   </li>
    285   <li>
    286     Omit common suffixes like "<code>_Islands</code>" and
    287     "<code>_City</code>", unless that would lead to ambiguity.
    288     E.g., prefer <code>America/Cayman</code> to
    289     <code>America/Cayman_Islands</code> and
    290     <code>America/Guatemala</code> to
    291     <code>America/Guatemala_City</code>, but prefer
    292     <code>America/Mexico_City</code> to
    293     <code>America/Mexico</code>
    294     because <a href="https://en.wikipedia.org/wiki/Time_in_Mexico">the
    295     country of Mexico has several time zones</a>.
    296   </li>
    297   <li>
    298     Use "<code>_</code>" to represent a space.
    299   </li>
    300   <li>
    301     Omit "<code>.</code>" from abbreviations in names.
    302     E.g., prefer <code>Atlantic/St_Helena</code> to
    303     <code>Atlantic/St._Helena</code>.
    304   </li>
    305   <li>
    306     Do not change established names if they only marginally violate
    307     the above guidelines.
    308     For example, do not change the existing name <code>Europe/Rome</code> to
    309     <code>Europe/Milan</code> merely because Milans population has grown
    310     to be somewhat greater than Romes.
    311   </li>
    312   <li>
    313     If a name is changed, put its old spelling in the
    314     "<code>backward</code>" file as a link to the new spelling.
    315     This means old spellings will continue to work.
    316     Ordinarily a name change should occur only in the rare case when
    317     a locations consensus English-language spelling changes; for example,
    318     in 2008 <code>Asia/Calcutta</code> was renamed to <code>Asia/Kolkata</code>
    319     due to long-time widespread use of the new city name instead of the old.
    320   </li>
    321 </ul>
    322 
    323 <p>
    324 Guidelines have evolved with time, and names following old versions of
    325 these guidelines might not follow the current version. When guidelines
    326 have changed, old names continue to be supported. Guideline changes
    327 have included the following:
    328 </p>
    329 
    330 <ul>
    331 <li>
    332 Older versions of this package used a different naming scheme.
    333 See the file "<code>backward</code>" for most of these older names
    334 (e.g., <code>US/Eastern</code> instead of <code>America/New_York</code>).
    335 The other old-fashioned names still supported are
    336 <code>WET</code>, <code>CET</code>, <code>MET</code>, and
    337 <code>EET</code> (see the file "<code>europe</code>").
    338 </li>
    339 
    340 <li>
    341 Older versions of this package defined legacy names that are
    342 incompatible with the first guideline of location names, but which are
    343 still supported.
    344 These legacy names are mostly defined in the file
    345 "<code>etcetera</code>".
    346 Also, the file "<code>backward</code>" defines the legacy names
    347 <code>Etc/GMT0</code>, <code>Etc/GMT-0</code>, <code>Etc/GMT+0</code>,
    348 <code>GMT0</code>, <code>GMT-0</code> and <code>GMT+0</code>,
    349 and the file "<code>northamerica</code>" defines the legacy names
    350 <code>EST5EDT</code>, <code>CST6CDT</code>,
    351 <code>MST7MDT</code>, and <code>PST8PDT</code>.
    352 </li>
    353 
    354 <li>
    355 Older versions of these guidelines said that
    356 there should typically be at least one name for each <a
    357 href="https://en.wikipedia.org/wiki/ISO_3166-1"><abbr
    358 title="International Organization for Standardization">ISO</abbr>
    359 3166-1</a> officially assigned two-letter code for an inhabited
    360 country or territory.
    361 This old guideline has been dropped, as it was not needed to handle
    362 timestamps correctly and it increased maintenance burden.
    363 </li>
    364 </ul>
    365 
    366 <p>
    367 The file <code>zone1970.tab</code> lists geographical locations used
    368 to name timezones.
    369 It is intended to be an exhaustive list of names for geographic
    370 regions as described above; this is a subset of the timezones in the data.
    371 Although a <code>zone1970.tab</code> locations
    372 <a href="https://en.wikipedia.org/wiki/Longitude">longitude</a>
    373 corresponds to
    374 its <a href="https://en.wikipedia.org/wiki/Local_mean_time">local mean
    375 time (<abbr>LMT</abbr>)</a> offset with one hour for every 15
    376 east longitude, this relationship is not exact.
    377 The backward-compatibility file <code>zone.tab</code> is similar
    378 but conforms to the older-version guidelines related to <abbr>ISO</abbr> 3166-1;
    379 it lists only one country code per entry and unlike <code>zone1970.tab</code>
    380 it can list names defined in <code>backward</code>.
    381 Applications that process only timestamps from now on can instead use the file
    382 <code>zonenow.tab</code>, which partitions the world more coarsely,
    383 into regions where clocks agree now and in the predicted future;
    384 this file is smaller and simpler than <code>zone1970.tab</code>
    385 and <code>zone.tab</code>.
    386 </p>
    387 
    388 <p>
    389 The database defines each timezone name to be a zone, or a link to a zone.
    390 The source file <code>backward</code> defines links for backward
    391 compatibility; it does not define zones.
    392 Although <code>backward</code> was originally designed to be optional,
    393 nowadays distributions typically use it
    394 and no great weight should be attached to whether a link
    395 is defined in <code>backward</code> or in some other file.
    396 The source file <code>etcetera</code> defines names that may be useful
    397 on platforms that do not support proleptic <code>TZ</code> strings
    398 like <code>&lt;+08&gt;-8</code>;
    399 no other source file other than <code>backward</code>
    400 contains links to its zones.
    401 One of <code>etcetera</code>s names is <code>Etc/UTC</code>,
    402 used by functions like <code>gmtime</code> to obtain leap
    403 second information on platforms that support leap seconds.
    404 Another <code>etcetera</code> name, <code>GMT</code>,
    405 is used by older code releases.
    406 </p>
    407 </section>
    408 
    409 <section>
    410   <h2 id="abbreviations">Time zone abbreviations</h2>
    411 <p>
    412 When this package is installed, it generates time zone abbreviations
    413 like <code>EST</code> to be compatible with human tradition and POSIX.
    414 Here are the general guidelines used for choosing time zone abbreviations,
    415 in decreasing order of importance:
    416 </p>
    417 
    418 <ul>
    419   <li>
    420     Use three to six characters that are ASCII alphanumerics or
    421     "<code>+</code>" or "<code>-</code>".
    422     Previous editions of this database also used characters like
    423     space and "<code>?</code>", but these characters have a
    424     special meaning to the
    425     <a href="https://en.wikipedia.org/wiki/Unix_shell">UNIX shell</a>
    426     and cause commands like
    427     "<code><a href="https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#set">set</a>
    428     `<a href="https://pubs.opengroup.org/onlinepubs/9799919799/utilities/date.html">date</a>`</code>"
    429     to have unexpected effects.
    430     Previous editions of this guideline required upper-case letters, but the
    431     Congressman who introduced
    432     <a href="https://en.wikipedia.org/wiki/Chamorro_Time_Zone">Chamorro
    433     Standard Time</a> preferred ChST, so lower-case letters are now allowed.
    434     Also, POSIX from 2001 on relaxed the rule to allow "<code>-</code>",
    435     "<code>+</code>", and alphanumeric characters from the portable
    436     character set in the current locale.
    437     In practice ASCII alphanumerics and "<code>+</code>" and
    438     "<code>-</code>" are safe in all locales.
    439 
    440     <p>
    441     In other words, in the C locale the POSIX extended regular
    442     expression <code>[-+[:alnum:]]{3,6}</code> should match the
    443     abbreviation.
    444     This guarantees that all abbreviations could have been specified
    445     explicitly by a POSIX proleptic <code>TZ</code> string.
    446     </p>
    447   </li>
    448   <li>
    449     Use abbreviations that are in common use among English-speakers,
    450     e.g., EST for Eastern Standard Time in North America.
    451     We assume that applications translate them to other languages
    452     as part of the normal localization process; for example,
    453     a French application might translate EST to HNE.
    454 
    455     <p>
    456     <small>These abbreviations (for standard/daylight/etc. time) are:
    457       ACST/ACDT Australian Central,
    458       AST/ADT/APT/AWT/ADDT Atlantic,
    459       AEST/AEDT Australian Eastern,
    460       AHST/AHDT Alaska-Hawaii,
    461       AKST/AKDT Alaska,
    462       AWST/AWDT Australian Western,
    463       BST/BDT Bering,
    464       CAT/CAST Central Africa,
    465       CET/CEST/CEMT Central European,
    466       ChST Chamorro,
    467       CST/CDT/CWT/CPT Central [North America],
    468       CST/CDT China,
    469       GMT/BST/IST/BDST Greenwich,
    470       EAT East Africa,
    471       EST/EDT/EWT/EPT Eastern [North America],
    472       EET/EEST Eastern European,
    473       GST/GDT Guam,
    474       HST/HDT/HWT/HPT Hawaii,
    475       HKT/HKST/HKWT Hong Kong,
    476       IST India,
    477       IST/GMT Irish,
    478       IST/IDT/IDDT Israel,
    479       JST/JDT Japan,
    480       KST/KDT Korea,
    481       MET/MEST Middle European (a backward-compatibility alias for
    482 	Central European),
    483       MSK/MSD Moscow,
    484       MST/MDT/MWT/MPT Mountain,
    485       NST/NDT/NWT/NPT/NDDT Newfoundland,
    486       NST/NDT/NWT/NPT Nome,
    487       NZMT/NZST New Zealand through 1945,
    488       NZST/NZDT New Zealand 1946present,
    489       PKT/PKST Pakistan,
    490       PST/PDT/PWT/PPT Pacific,
    491       PST/PDT Philippine,
    492       SAST South Africa,
    493       SST Samoa,
    494       UTC Universal,
    495       WAT/WAST West Africa,
    496       WET/WEST/WEMT Western European,
    497       WIB Waktu Indonesia Barat,
    498       WIT Waktu Indonesia Timur,
    499       WITA Waktu Indonesia Tengah,
    500       YST/YDT/YWT/YPT/YDDT Yukon</small>.
    501     </p>
    502   </li>
    503   <li>
    504     <p>
    505     For times taken from a citys longitude, use the
    506     traditional <var>x</var>MT notation.
    507     The only abbreviation like this in current use is <abbr>GMT</abbr>.
    508     The others are for timestamps before 1960,
    509     except that Monrovia Mean Time persisted until 1972.
    510     Typically, numeric abbreviations (e.g., <code>-</code>004430 for
    511     MMT) would cause trouble here, as the numeric strings would exceed
    512     the POSIX length limit.
    513     </p>
    514 
    515     <p>
    516     <small>These abbreviations are:
    517       AMT Asuncin, Athens;
    518       BMT Baghdad, Bangkok, Batavia, Bermuda, Bern, Bogot,
    519         Brussels, Bucharest;
    520       CMT Calamarca, Caracas, Chisinau, Coln, Crdoba;
    521       DMT Dublin/Dunsink;
    522       EMT Easter;
    523       FFMT Fort-de-France;
    524       FMT Funchal;
    525       GMT Greenwich;
    526       HMT Havana, Helsinki, Horta, Howrah;
    527       IMT Irkutsk, Istanbul;
    528       JMT Jerusalem;
    529       KMT Kaunas, Kyiv, Kingston;
    530       LMT Lima, Lisbon, local;
    531       MMT Macassar, Madras, Mal, Managua, Minsk, Monrovia, Montevideo,
    532 	Moratuwa, Moscow;
    533       PLMT Ph Lin;
    534       PMT Paramaribo, Paris, Perm, Pontianak, Prague;
    535       PMMT Port Moresby;
    536       PPMT Port-au-Prince;
    537       QMT Quito;
    538       RMT Rangoon, Riga, Rome;
    539       SDMT Santo Domingo;
    540       SJMT San Jos;
    541       SMT Santiago, Simferopol, Singapore, Stanley;
    542       TBMT Tbilisi;
    543       TMT Tallinn, Tehran;
    544       WMT Warsaw.</small>
    545     </p>
    546 
    547     <p>
    548     <small>A few abbreviations also follow the pattern that
    549     <abbr>GMT</abbr>/<abbr>BST</abbr> established for time in the UK.
    550     They are:
    551       BMT/BST for Bermuda 18901930,
    552       CMT/BST for Calamarca Mean Time and Bolivian Summer Time
    553 	18901932,
    554       DMT/IST for Dublin/Dunsink Mean Time and Irish Summer Time
    555 	18801916,
    556       MMT/MST/MDST for Moscow 18801919, and
    557       RMT/LST for Riga Mean Time and Latvian Summer time 18801926.
    558     </small>
    559     </p>
    560   </li>
    561   <li>
    562     Use <abbr>LMT</abbr> for local mean time of locations before the
    563     introduction of standard time; see <a href="#scope">Scope of the
    564     <code><abbr>tz</abbr></code> database</a>.
    565   </li>
    566   <li>
    567     If there is no common English abbreviation, use numeric offsets like
    568     <code>-</code>05 and <code>+</code>0530 that are generated
    569     by <code>zic</code>s <code>%z</code> notation.
    570   </li>
    571   <li>
    572     Use current abbreviations for older timestamps to avoid confusion.
    573     For example, in 1910 a common English abbreviation for time
    574     in central Europe was MEZ (short for both Middle European
    575     Zone and for Mitteleuropische Zeit in German).
    576     Nowadays CET (Central European Time) is more common in
    577     English, and the database uses CET even for circa-1910
    578     timestamps as this is less confusing for modern users and avoids
    579     the need for determining when CET supplanted MEZ in common
    580     usage.
    581   </li>
    582   <li>
    583     Use a consistent style in a timezones history.
    584     For example, if a history tends to use numeric
    585     abbreviations and a particular entry could go either way, use a
    586     numeric abbreviation.
    587   </li>
    588   <li>
    589     Use
    590     <a href="https://en.wikipedia.org/wiki/Universal_Time">Universal Time</a>
    591     (<abbr>UT</abbr>) (with time zone abbreviation <code>-</code>00) for
    592     locations while uninhabited.
    593     The leading "<code>-</code>" is a flag that the <abbr>UT</abbr> offset is in
    594     some sense undefined; this notation is derived
    595     from <a href="https://www.rfc-editor.org/rfc/rfc3339">Internet
    596     <abbr title="Request For Comments">RFC</abbr> 3339</a>.
    597     (The abbreviation Z that
    598     <a href="https://www.rfc-editor.org/rfc/rfc9557">Internet
    599     <abbr>RFC</abbr> 9557</a> uses for this concept
    600     would violate the POSIX requirement
    601     of at least three characters in an abbreviation.)
    602   </li>
    603 </ul>
    604 
    605 <p>
    606 Application writers should note that these abbreviations are ambiguous
    607 in practice: e.g., CST means one thing in China and something else
    608 in North America, and IST can refer to time in India, Ireland or
    609 Israel.
    610 To avoid ambiguity, use numeric <abbr>UT</abbr> offsets like
    611 <code>-</code>0600 instead of time zone abbreviations like CST.
    612 </p>
    613 </section>
    614 
    615 <section>
    616   <h2 id="accuracy">Accuracy of the <code><abbr>tz</abbr></code> database</h2>
    617 <p>
    618 The <code><abbr>tz</abbr></code> database is not authoritative, and it
    619 surely has errors.
    620 Corrections are welcome and encouraged; see the file <code>CONTRIBUTING</code>.
    621 Users requiring authoritative data should consult national standards
    622 bodies and the references cited in the databases comments.
    623 </p>
    624 
    625 <p>
    626 Errors in the <code><abbr>tz</abbr></code> database arise from many sources:
    627 </p>
    628 
    629 <ul>
    630   <li>
    631     The <code><abbr>tz</abbr></code> database predicts future
    632     timestamps, and current predictions
    633     will be incorrect after future governments change the rules.
    634     For example, if today someone schedules a meeting for 13:00 next
    635     October 1, Casablanca time, and tomorrow Morocco changes its
    636     daylight saving rules, software can mess up after the rule change
    637     if it blithely relies on conversions made before the change.
    638   </li>
    639   <li>
    640     The pre-1970 entries in this database cover only a tiny sliver of how
    641     clocks actually behaved; the vast majority of the necessary
    642     information was lost or never recorded.
    643     Thousands more timezones would be needed if
    644     the <code><abbr>tz</abbr></code> databases scope were extended to
    645     cover even just the known or guessed history of standard time; for
    646     example, the current single entry for France would need to split
    647     into dozens of entries, perhaps hundreds.
    648     And in most of the world even this approach would be misleading
    649     due to widespread disagreement or indifference about what times
    650     should be observed.
    651     In her 2015 book
    652     <cite><a
    653     href="https://www.hup.harvard.edu/books/9780674286146">The
    654     Global Transformation of Time, 18701950</a></cite>,
    655     Vanessa Ogle writes
    656     Outside of Europe and North America there was no system of time
    657     zones at all, often not even a stable landscape of mean times,
    658     prior to the middle decades of the twentieth century.
    659     See: Timothy Shenk, <a
    660 href="https://dissentmagazine.org/blog/booked-a-global-history-of-time-vanessa-ogle/">Booked:
    661       A Global History of Time</a>. <cite>Dissent</cite> 2015-12-17.
    662   </li>
    663   <li>
    664     Most of the pre-1970 data entries come from unreliable sources, often
    665     astrology books that lack citations and whose compilers evidently
    666     invented entries when the true facts were unknown, without
    667     reporting which entries were known and which were invented.
    668     These books often contradict each other or give implausible entries,
    669     and on the rare occasions when they are checked they are
    670     typically found to be incorrect.
    671   </li>
    672   <li>
    673     For the UK the <code><abbr>tz</abbr></code> database relies on
    674     years of first-class work done by
    675     Joseph Myers and others; see
    676     <a href="https://www.polyomino.org.uk/british-time/">History of
    677     legal time in Britain</a>.
    678     Other countries are not done nearly as well.
    679   </li>
    680   <li>
    681     Sometimes, different people in the same city maintain clocks
    682     that differ significantly.
    683     Historically, railway time was used by railroad companies (which
    684     did not always
    685     agree with each other), church-clock time was used for birth
    686     certificates, etc.
    687     More recently, competing political groups might disagree about
    688     clock settings. Often this is merely common practice, but
    689     sometimes it is set by law.
    690     For example, from 1891 to 1911 the <abbr>UT</abbr> offset in France
    691     was legally <abbr>UT</abbr> +00:09:21 outside train stations and
    692     <abbr>UT</abbr> +00:04:21 inside. Other examples include
    693     Chillicothe in 1920, Palm Springs in 1946/7, and Jerusalem and
    694     rmqi to this day.
    695   </li>
    696   <li>
    697     Although a named location in the <code><abbr>tz</abbr></code>
    698     database stands for the containing region, its pre-1970 data
    699     entries are often accurate for only a small subset of that region.
    700     For example, <code>Europe/London</code> stands for the United
    701     Kingdom, but its pre-1847 times are valid only for locations that
    702     have Londons exact meridian, and its 1847 transition
    703     to <abbr>GMT</abbr> is known to be valid only for the L&amp;NW and
    704     the Caledonian railways.
    705   </li>
    706   <li>
    707     The <code><abbr>tz</abbr></code> database does not record the
    708     earliest time for which a timezones
    709     data entries are thereafter valid for every location in the region.
    710     For example, <code>Europe/London</code> is valid for all locations
    711     in its region after <abbr>GMT</abbr> was made the standard time,
    712     but the date of standardization (1880-08-02) is not in the
    713     <code><abbr>tz</abbr></code> database, other than in commentary.
    714     For many timezones the earliest time of
    715     validity is unknown.
    716   </li>
    717   <li>
    718     The <code><abbr>tz</abbr></code> database does not record a
    719     regions boundaries, and in many cases the boundaries are not known.
    720     For example, the timezone
    721     <code>America/Kentucky/Louisville</code> represents a region
    722     around the city of Louisville, the boundaries of which are
    723     unclear.
    724   </li>
    725   <li>
    726     Changes that are modeled as instantaneous transitions in the
    727     <code><abbr>tz</abbr></code>
    728     database were often spread out over hours, days, or even decades.
    729   </li>
    730   <li>
    731     Even if the time is specified by law, locations sometimes
    732     deliberately flout the law.
    733   </li>
    734   <li>
    735     Early timekeeping practices, even assuming perfect clocks, were
    736     often not specified to the accuracy that the
    737     <code><abbr>tz</abbr></code> database requires.
    738   </li>
    739   <li>
    740     The <code><abbr>tz</abbr></code> database cannot represent stopped clocks.
    741     However, on 1911-03-11 at 00:00, some public-facing French clocks
    742     were changed by stopping them for a few minutes to effect a transition.
    743     The <code><abbr>tz</abbr></code> database models this via a
    744     backward transition; the relevant French legislation does not
    745     specify exactly how the transition was to occur.
    746   </li>
    747   <li>
    748     Sometimes historical timekeeping was specified more precisely
    749     than what the <code><abbr>tz</abbr></code> code can handle.
    750     For example, from 1880 to 1916 clocks in Ireland observed Dublin Mean
    751     Time (estimated to be <abbr>UT</abbr>
    752     00:25:21.1); although the <code><abbr>tz</abbr></code>
    753     source data can represent the .1 second, TZif files and the code cannot.
    754     In practice these old specifications were rarely if ever
    755     implemented to subsecond precision.
    756   </li>
    757   <li>
    758     Even when all the timestamp transitions recorded by the
    759     <code><abbr>tz</abbr></code> database are correct, the
    760     <code><abbr>tz</abbr></code> rules that generate them may not
    761     faithfully reflect the historical rules.
    762     For example, from 1922 until World War II the UK moved clocks
    763     forward the day following the third Saturday in April unless that
    764     was Easter, in which case it moved clocks forward the previous
    765     Sunday.
    766     Because the <code><abbr>tz</abbr></code> database has no
    767     way to specify Easter, these exceptional years are entered as
    768     separate <code><abbr>tz</abbr> Rule</code> lines, even though the
    769     legal rules did not change.
    770     When transitions are known but the historical rules behind them are not,
    771     the database contains <code>Zone</code> and <code>Rule</code>
    772     entries that are intended to represent only the generated
    773     transitions, not any underlying historical rules; however, this
    774     intent is recorded at best only in commentary.
    775   </li>
    776   <li>
    777     The <code><abbr>tz</abbr></code> database models time
    778     using the <a
    779     href="https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar">proleptic
    780     Gregorian calendar</a> with days containing 24 equal-length hours
    781     numbered 00 through 23, except when clock transitions occur.
    782     Pre-standard time is modeled as local mean time.
    783     However, historically many people used other calendars and other timescales.
    784     For example, the Roman Empire used
    785     the <a href="https://en.wikipedia.org/wiki/Julian_calendar">Julian
    786     calendar</a>,
    787     and <a href="https://en.wikipedia.org/wiki/Roman_timekeeping">Roman
    788     timekeeping</a> had twelve varying-length daytime hours with a
    789     non-hour-based system at night.
    790     And even today, some local practices diverge from the Gregorian
    791     calendar with 24-hour days. These divergences range from
    792     relatively minor, such as Japanese bars giving times like 24:30 for the
    793     wee hours of the morning, to more-significant differences such as <a
    794     href="https://theworld.org/stories/2015/01/30/ethiopian-time">the
    795     east African practice of starting the day at dawn</a>, renumbering
    796     the Western 06:00 to be 12:00. These practices are largely outside
    797     the scope of the <code><abbr>tz</abbr></code> code and data, which
    798     provide only limited support for date and time localization
    799     such as that required by POSIX.
    800     If <abbr>DST</abbr> is not used a different time zone
    801     can often do the trick; for example, in Kenya a <code>TZ</code> setting
    802     like <code>&lt;-03&gt;3</code> or <code>America/Cayenne</code> starts
    803     the day six hours later than <code>Africa/Nairobi</code> does.
    804   </li>
    805   <li>
    806     Early clocks were less reliable, and data entries do not represent
    807     clock error.
    808   </li>
    809   <li>
    810     The <code><abbr>tz</abbr></code> database assumes Universal Time
    811     (<abbr>UT</abbr>) as an origin, even though <abbr>UT</abbr> is not
    812     standardized for older timestamps.
    813     In the <code><abbr>tz</abbr></code> database commentary,
    814     <abbr>UT</abbr> denotes a family of time standards that includes
    815     Coordinated Universal Time (<abbr>UTC</abbr>) along with other
    816     variants such as <abbr>UT1</abbr> and <abbr>GMT</abbr>,
    817     with days starting at midnight.
    818     Although <abbr>UT</abbr> equals <abbr>UTC</abbr> for modern
    819     timestamps, <abbr>UTC</abbr> was not defined until 1960, so
    820     commentary uses the more general abbreviation <abbr>UT</abbr> for
    821     timestamps that might predate 1960.
    822     Since <abbr>UT</abbr>, <abbr>UT1</abbr>, etc. disagree slightly,
    823     and since pre-1972 <abbr>UTC</abbr> seconds varied in length,
    824     interpretation of older timestamps can be problematic when
    825     subsecond accuracy is needed.
    826   </li>
    827   <li>
    828     Civil time was not based on atomic time before 1972, and we do not
    829     know the history of
    830     <a href="https://en.wikipedia.org/wiki/Earth's_rotation">earths
    831     rotation</a> accurately enough to map <a
    832     href="https://en.wikipedia.org/wiki/International_System_of_Units"><abbr
    833     title="International System of Units">SI</abbr></a> seconds to
    834     historical <a href="https://en.wikipedia.org/wiki/Solar_time">solar time</a>
    835     to more than about one-hour accuracy.
    836     See: Morrison LV, Stephenson FR, Hohenkerk CY, Zawilski M.
    837     <a href="https://doi.org/10.1098/rspa.2020.0776">Addendum 2020
    838     to Measurement of the Earths rotation: 720 BC to AD 2015</a>.
    839     <cite>Proc Royal Soc A</cite>. 2021;477:20200776.
    840     Also see: Espenak F. <a
    841     href="https://eclipse.gsfc.nasa.gov/SEhelp/uncertainty2004.html">Uncertainty
    842     in Delta T (T)</a>.
    843   </li>
    844   <li>
    845     The relationship between POSIX time (that is, <abbr>UTC</abbr> but
    846     ignoring <a href="https://en.wikipedia.org/wiki/Leap_second">leap
    847     seconds</a>) and <abbr>UTC</abbr> is not agreed upon.
    848     This affects time stamps during the leap second era (19722035).
    849     Although the POSIX
    850     clock officially stops during an inserted leap second, at least one
    851     proposed standard has it jumping back a second instead; and in
    852     practice POSIX clocks more typically either progress glacially during
    853     a leap second, or are slightly slowed while near a leap second.
    854   </li>
    855   <li>
    856     The <code><abbr>tz</abbr></code> database does not represent how
    857     uncertain its information is.
    858     Ideally it would contain information about when data entries are
    859     incomplete or dicey.
    860     Partial temporal knowledge is a field of active research, though,
    861     and it is not clear how to apply it here.
    862   </li>
    863 </ul>
    864 
    865 <p>
    866 In short, many, perhaps most, of the <code><abbr>tz</abbr></code>
    867 databases pre-1970 and future timestamps are either wrong or
    868 misleading.
    869 Any attempt to pass the
    870 <code><abbr>tz</abbr></code> database off as the definition of time
    871 should be unacceptable to anybody who cares about the facts.
    872 In particular, the <code><abbr>tz</abbr></code> databases
    873 <abbr>LMT</abbr> offsets should not be considered meaningful, and
    874 should not prompt creation of timezones
    875 merely because two locations
    876 differ in <abbr>LMT</abbr> or transitioned to standard time at
    877 different dates.
    878 </p>
    879 </section>
    880 
    881 <section>
    882   <h2 id="functions">Time and date functions</h2>
    883 <p>
    884 The <code><abbr>tz</abbr></code> code contains time and date functions
    885 that are upwards compatible with those of POSIX.
    886 Code compatible with this package is already
    887 <a href="tz-link.html#tzdb">part of many platforms</a>, where the
    888 primary use of this package is to update obsolete time-related files.
    889 To do this, you may need to compile the time zone compiler
    890 <code>zic</code> supplied with this package instead of using the
    891 system <code>zic</code>, since the format of <code>zic</code>s
    892 input is occasionally extended, and a platform may still be shipping
    893 an older <code>zic</code>.
    894 </p>
    895 
    896 <p>
    897 In POSIX, time display in a process is controlled by the
    898 environment variable <code>TZ</code>, which can have two forms:
    899 </p>
    900 <ul>
    901   <li>
    902     A <dfn>proleptic <code>TZ</code></dfn> value
    903     like <code>CET-1CEST,M3.5.0,M10.5.0/3</code> uses a complex
    904     notation that specifies a single standard time along with daylight
    905     saving rules that apply to all years past, present, and future.
    906   </li>
    907   <li>
    908     A <dfn>geographical <code>TZ</code></dfn> value
    909     like <code>Europe/Berlin</code> names a location that stands for
    910     civil time near that location, which can have more than
    911     one standard time and more than one set of daylight saving rules,
    912     to record timekeeping practice more accurately.
    913     These names are defined by the <code><abbr>tz</abbr></code> database.
    914   </li>
    915 </ul>
    916 
    917 <h3 id="POSIX.1-2017">POSIX.1-2017 properties and limitations</h3>
    918 <p>
    919 Some platforms support only the features required by POSIX.1-2017
    920 and earlier editions,
    921 and have not yet upgraded to POSIX.1-2024.
    922 Code intended to be portable to these platforms must deal
    923 with problems that were fixed in later POSIX editions.
    924 </p>
    925 
    926 <ul>
    927   <li>
    928     POSIX.1-2017 does not require support for geographical <code>TZ</code>,
    929     and there is no convenient and efficient way to determine
    930     the <abbr>UT</abbr> offset and time zone abbreviation of arbitrary
    931     timestamps, particularly for timezones
    932     that do not fit into the POSIX model.
    933   </li>
    934   <li>
    935     <p>
    936     The proleptic <code>TZ</code> string,
    937     which is all that POSIX.1-2017 requires,
    938     has a format that is hard to describe and is error-prone in practice.
    939     Also, proleptic <code>TZ</code> strings cannot deal with daylight
    940     saving time rules not based on the Gregorian calendar (as in
    941     Morocco), or with situations where more than two time zone
    942     abbreviations or <abbr>UT</abbr> offsets are used in an area.
    943     </p>
    944 
    945     <p>
    946     A proleptic <code>TZ</code> string has the following format:
    947     </p>
    948 
    949     <p>
    950     <var>stdoffset</var>[<var>dst</var>[<var>offset</var>][<code>,</code><var>date</var>[<code>/</code><var>time</var>]<code>,</code><var>date</var>[<code>/</code><var>time</var>]]]
    951     </p>
    952 
    953     <p>
    954     where:
    955     </p>
    956 
    957     <dl>
    958       <dt><var>std</var> and <var>dst</var></dt><dd>
    959 	are 3 or more characters specifying the standard
    960 	and daylight saving time (<abbr>DST</abbr>) zone abbreviations.
    961 	Starting with POSIX.1-2001, <var>std</var> and <var>dst</var>
    962 	may also be quoted in angle brackets, like <code>&lt;+09&gt;</code>;
    963 	this allows "<code>+</code>" and "<code>-</code>" in the names.
    964       </dd>
    965       <dt><var>offset</var></dt><dd>
    966 	is of the form
    967 	<code>[]<var>hh</var>:[<var>mm</var>[:<var>ss</var>]]</code>
    968 	and specifies the offset west of <abbr>UT</abbr>.
    969 	<var>hh</var> may be a single digit;
    970 	0&le;<var>hh</var>&le;24.
    971 	The default <abbr>DST</abbr> offset is one hour ahead of
    972 	standard time.
    973       </dd>
    974       <dt><var>date</var>[<code>/</code><var>time</var>]<code>,</code><var>date</var>[<code>/</code><var>time</var>]</dt><dd>
    975 	specifies the beginning and end of <abbr>DST</abbr>.
    976 	If this is absent, the system supplies its own ruleset
    977 	for <abbr>DST</abbr>, typically	current <abbr>US</abbr>
    978 	<abbr>DST</abbr> rules.
    979       </dd>
    980       <dt><var>time</var></dt><dd>
    981 	takes the form
    982 	<var>hh</var><code>:</code>[<var>mm</var>[<code>:</code><var>ss</var>]]
    983 	and defaults to 02:00.
    984 	This is the same format as the offset, except that a
    985 	leading "<code>+</code>" or "<code>-</code>" is not allowed.
    986       </dd>
    987       <dt><var>date</var></dt><dd>
    988 	takes one of the following forms:
    989 	<dl>
    990 	  <dt>J<var>n</var> (1&le;<var>n</var>&le;365)</dt><dd>
    991 	    origin-1 day number not counting February 29
    992 	  </dd>
    993 	  <dt><var>n</var> (0&le;<var>n</var>&le;365)</dt><dd>
    994 	    origin-0 day number counting February 29 if present
    995 	  </dd>
    996 	  <dt><code>M</code><var>m</var><code>.</code><var>n</var><code>.</code><var>d</var>
    997 	    (0[Sunday]&le;<var>d</var>&le;6[Saturday], 1&le;<var>n</var>&le;5,
    998 	    1&le;<var>m</var>&le;12)</dt><dd>
    999 	    for the <var>d</var>th day of week <var>n</var> of
   1000 	    month <var>m</var> of the year, where week 1 is the first
   1001 	    week in which day <var>d</var> appears, and
   1002 	    "<code>5</code>" stands for the last week in which
   1003 	    day <var>d</var> appears (which may be either the 4th or
   1004 	    5th week).
   1005 	    Typically, this is the only useful form; the <var>n</var>
   1006 	    and <code>J</code><var>n</var> forms are rarely used.
   1007 	  </dd>
   1008 	</dl>
   1009       </dd>
   1010     </dl>
   1011 
   1012     <p>
   1013     Here is an example proleptic <code>TZ</code> string for New
   1014     Zealand after 2007.
   1015     It says that standard time (<abbr>NZST</abbr>) is 12 hours ahead
   1016     of <abbr>UT</abbr>, and that daylight saving time
   1017     (<abbr>NZDT</abbr>) is observed from Septembers last Sunday at
   1018     02:00 until Aprils first Sunday at 03:00:
   1019     </p>
   1020 
   1021     <pre><code>TZ='NZST-12NZDT,M9.5.0,M4.1.0/3'</code></pre>
   1022 
   1023     <p>
   1024     This proleptic <code>TZ</code> string is hard to remember, and
   1025     mishandles some timestamps before 2008.
   1026     With this package you can use a geographical <code>TZ</code> instead:
   1027     </p>
   1028 
   1029     <pre><code>TZ='Pacific/Auckland'</code></pre>
   1030   </li>
   1031 </ul>
   1032 
   1033 <p>
   1034 POSIX.1-2017 also has the limitations of POSIX.1-2024,
   1035 discussed in the next section.
   1036 </p>
   1037 
   1038 <h3 id="POSIX.1-2024">POSIX.1-2024 properties and limitations</h3>
   1039 <p>
   1040 POSIX.1-2024 extends POSIX.1-2017 in the following significant ways:
   1041 </p>
   1042 <ul>
   1043   <li>
   1044     POSIX.1-2024 requires support for geographical <code>TZ</code>.
   1045     Earlier POSIX editions require support only for proleptic <code>TZ</code>.
   1046   </li>
   1047   <li>
   1048     POSIX.1-2024 requires <code>struct tm</code>
   1049     to have a <abbr>UT</abbr> offset member <code>tm_gmtoff</code>
   1050     and a time zone abbreviation member <code>tm_zone</code>.
   1051     Earlier POSIX editions lack this requirement.
   1052   </li>
   1053   <li>
   1054     DST transition times can range from 167:59:59
   1055     to 167:59:59 instead of merely from 00:00:00 to 24:59:59.
   1056     This allows for proleptic TZ strings
   1057     like <code>"&lt;-02&gt;2&lt;-01&gt;,M3.5.0/-1,M10.5.0/0"</code>
   1058     where the transition time 1:00 means 23:00 the previous day.
   1059   </li>
   1060 </ul>
   1061 <p>
   1062 However POSIX.1-2024, like earlier POSIX editions, has some limitations:
   1063 <ul>
   1064   <li>
   1065     The <code>TZ</code> environment variable is process-global, which
   1066     makes it hard to write efficient, thread-safe applications that
   1067     need access to multiple timezones.
   1068   </li>
   1069   <li>
   1070     In POSIX, there is no tamper-proof way for a process to learn the
   1071     systems best idea of local (wall clock) time.
   1072     This is important for applications that an administrator wants
   1073     used only at certain times  without regard to whether the
   1074     user has fiddled the
   1075     <code>TZ</code> environment variable.
   1076     While an administrator can do everything in <abbr>UT</abbr> to
   1077     get around the problem, doing so is inconvenient and precludes
   1078     handling daylight saving time shifts  as might be required to
   1079     limit phone calls to off-peak hours.
   1080   </li>
   1081   <li>
   1082     POSIX requires that <code>time_t</code> clock counts exclude leap
   1083     seconds.
   1084   </li>
   1085   <li>
   1086     POSIX does not define the <abbr>DST</abbr> transitions
   1087     for settings like <code>TZ='EST5EDT'</code>.
   1088     Traditionally the current <abbr>US</abbr> <abbr>DST</abbr> rules
   1089     were used to interpret such values, but this meant that the
   1090     <abbr>US</abbr> <abbr>DST</abbr> rules were compiled into each
   1091     time conversion package, and when
   1092     <abbr>US</abbr> time conversion rules changed (as in the United
   1093     States in 1987 and again in 2007), all packages that
   1094     interpreted <code>TZ</code> values had to be updated
   1095     to ensure proper results.
   1096   </li>
   1097 </ul>
   1098 
   1099 <h3 id="POSIX-extensions">Extensions to POSIX in the
   1100 <code><abbr>tz</abbr></code> code</h3>
   1101 <p>
   1102   The <code><abbr>tz</abbr></code> code defines some properties
   1103   left unspecified by POSIX, and attempts to support some
   1104   extensions to POSIX.
   1105 </p>
   1106 
   1107 <ul>
   1108   <li>
   1109     The <code><abbr>tz</abbr></code> code attempts to support all the
   1110     <code>time_t</code> implementations allowed by POSIX.
   1111     The <code>time_t</code> type represents a nonnegative count of seconds
   1112     since 1970-01-01 00:00:00 <abbr>UTC</abbr>, ignoring leap seconds.
   1113     In practice, <code>time_t</code> is usually a signed 64- or 32-bit
   1114     integer; 32-bit signed <code>time_t</code> values stop working after
   1115     2038-01-19 03:14:07 <abbr>UTC</abbr>, so new implementations these
   1116     days typically use a signed 64-bit integer.
   1117     Unsigned 32-bit integers are used on one or two platforms, and 36-bit
   1118     and 40-bit integers are also used occasionally.
   1119     Although earlier POSIX versions allowed <code>time_t</code> to be a
   1120     floating-point type, this was not supported by any practical system,
   1121     and POSIX.1-2013+ and the <code><abbr>tz</abbr></code> code both
   1122     require <code>time_t</code> to be an integer type.
   1123   </li>
   1124   <li>
   1125     <p>
   1126     If the <code>TZ</code> environment variable uses the geographical format,
   1127     it is used in generating
   1128     the name of a file from which time-related information is read.
   1129     The files format is <dfn><abbr>TZif</abbr></dfn>,
   1130     a timezone information format that contains binary data; see
   1131     <a href="https://www.rfc-editor.org/rfc/rfc9636">Internet
   1132     <abbr>RFC</abbr> 9636</a>.
   1133     The daylight saving time rules to be used for a
   1134     particular timezone are encoded in the
   1135     <abbr>TZif</abbr> file; the format of the file allows <abbr>US</abbr>,
   1136     Australian, and other rules to be encoded, and
   1137     allows for situations where more than two time zone
   1138     abbreviations are used.
   1139     </p>
   1140     <p>
   1141     When the <code><abbr>tz</abbr></code> code was developed in the 1980s,
   1142     it was recognized that allowing the <code>TZ</code> environment
   1143     variable to take on values such as <code>America/New_York</code>
   1144     might cause old programs (that expect <code>TZ</code> to have a
   1145     certain format) to operate incorrectly; consideration was given to using
   1146     some other environment variable (for example, <code>TIMEZONE</code>)
   1147     to hold the string used to generate the <abbr>TZif</abbr> files name.
   1148     In the end, however, it was decided to continue using
   1149     <code>TZ</code>: it is widely used for time zone purposes;
   1150     separately maintaining both <code>TZ</code>
   1151     and <code>TIMEZONE</code> seemed a nuisance; and systems where
   1152     new forms of <code>TZ</code> might cause problems can simply
   1153     use legacy settings such as <code>TZ='EST5EDT'</code> which
   1154     can be used by new programs as well as by old programs that
   1155     assume pre-POSIX <code>TZ</code> values.
   1156     </p>
   1157   </li>
   1158   <li>
   1159     Functions <code>tzalloc</code>, <code>tzfree</code>,
   1160     <code>localtime_rz</code>, and <code>mktime_z</code> for
   1161     more-efficient thread-safe applications that need to use multiple
   1162     timezones.
   1163     The <code>tzalloc</code> and <code>tzfree</code> functions
   1164     allocate and free objects of type <code>timezone_t</code>,
   1165     and <code>localtime_rz</code> and <code>mktime_z</code> are
   1166     like <code>localtime_r</code> and <code>mktime</code> with an
   1167     extra <code>timezone_t</code> argument.
   1168     The functions were inspired by <a href="https://netbsd.org">NetBSD</a>.
   1169   </li>
   1170   <li>
   1171     Negative <code>time_t</code> values are supported, on systems
   1172     where <code>time_t</code> is signed.
   1173   </li>
   1174   <li>
   1175     These functions can account for leap seconds;
   1176     see <a href="#leapsec">Leap seconds</a> below.
   1177   </li>
   1178 </ul>
   1179 
   1180 <h3 id="vestigial">POSIX features no longer needed</h3>
   1181 <p>
   1182 POSIX and <a href="https://en.wikipedia.org/wiki/ISO_C"><abbr>ISO</abbr> C</a>
   1183 define some <a href="https://en.wikipedia.org/wiki/API"><abbr
   1184 title="application programming interface">API</abbr>s</a> that are vestigial:
   1185 they are not needed, and are relics of a too-simple model that does
   1186 not suffice to handle many real-world timestamps.
   1187 Although the <code><abbr>tz</abbr></code> code supports these
   1188 vestigial <abbr>API</abbr>s for backwards compatibility, they should
   1189 be avoided in portable applications.
   1190 The vestigial <abbr>API</abbr>s are:
   1191 </p>
   1192 <ul>
   1193   <li>
   1194     The POSIX <code>tzname</code> variable does not suffice and is no
   1195     longer needed.
   1196     It is planned to be removed in a future edition of POSIX.
   1197     To get a timestamps time zone abbreviation, consult
   1198     the <code>tm_zone</code> member if available; otherwise,
   1199     use <code>strftime</code>s <code>"%Z"</code> conversion
   1200     specification.
   1201   </li>
   1202   <li>
   1203     The POSIX <code>daylight</code> and <code>timezone</code>
   1204     variables do not suffice and are no longer needed.
   1205     They are planned to be removed in a future edition of POSIX.
   1206     To get a timestamps <abbr>UT</abbr> offset, consult
   1207     the <code>tm_gmtoff</code> member if available; otherwise,
   1208     subtract values returned by <code>localtime</code>
   1209     and <code>gmtime</code> using the rules of the Gregorian calendar,
   1210     or use <code>strftime</code>s <code>"%z"</code> conversion
   1211     specification if a string like <code>"+0900"</code> suffices.
   1212   </li>
   1213   <li>
   1214     The <code>tm_isdst</code> member is almost never needed and most of
   1215     its uses should be discouraged in favor of the abovementioned
   1216     <abbr>API</abbr>s.
   1217     It was intended as an index into the <code>tzname</code> variable,
   1218     but as mentioned previously that usage is obsolete.
   1219     Although it can still be used in arguments to
   1220     <code>mktime</code> to disambiguate timestamps near
   1221     a <abbr>DST</abbr> transition when the clock jumps back on
   1222     platforms lacking <code>tm_gmtoff</code>, this
   1223     disambiguation works only for proleptic <code>TZ</code> strings;
   1224     it does not work in general for geographical timezones,
   1225     such as when a location changes to a time zone with a
   1226     lesser <abbr>UT</abbr> offset.
   1227   </li>
   1228 </ul>
   1229 
   1230 <h3 id="other-portability">Other portability notes</h3>
   1231 <ul>
   1232   <li>
   1233     The <a href="https://en.wikipedia.org/wiki/Version_7_Unix">7th Edition
   1234     UNIX</a> <code>timezone</code> function is not present in this
   1235     package; it is impossible to reliably map <code>timezone</code>s
   1236     arguments (a minutes west of <abbr>GMT</abbr> value and a
   1237     daylight saving time in effect flag) to a time zone
   1238     abbreviation, and we refuse to guess.
   1239     Programs that in the past used the <code>timezone</code> function
   1240     may now examine <code>localtime(&amp;clock)-&gt;tm_zone</code>
   1241     (if <code>TM_ZONE</code> is defined) or
   1242     use <code>strftime</code> with a <code>%Z</code> conversion specification
   1243     to learn the correct time
   1244     zone abbreviation to use.
   1245   </li>
   1246   <li>
   1247     The <a
   1248     href="https://en.wikipedia.org/wiki/History_of_the_Berkeley_Software_Distribution#4.2BSD"><abbr>4.2BSD</abbr></a>
   1249     <code>gettimeofday</code> function is not
   1250     used in this package.
   1251     This formerly let users obtain the current <abbr>UTC</abbr> offset
   1252     and <abbr>DST</abbr> flag, but this functionality was removed in
   1253     later versions of <abbr>BSD</abbr>.
   1254   </li>
   1255   <li>
   1256     In <abbr>SVR2</abbr>, time conversion fails for near-minimum or
   1257     near-maximum <code>time_t</code> values when doing conversions
   1258     for places that do not use <abbr>UT</abbr>.
   1259     This package takes care to do these conversions correctly.
   1260     A comment in the source code tells how to get compatibly wrong
   1261     results.
   1262   </li>
   1263   <li>
   1264     The functions that are conditionally compiled
   1265     if <code>STD_INSPIRED</code> is nonzero should, at this point, be
   1266     looked on primarily as food for thought.
   1267     They are not in any sense standard compatible  some are
   1268     not, in fact, specified in <em>any</em> standard.
   1269     They do, however, represent responses of various authors to
   1270     standardization proposals.
   1271   </li>
   1272   <li>
   1273     Other time conversion proposals, in particular those supported by the
   1274     <a href="https://howardhinnant.github.io/date/tz.html">Time Zone
   1275     Database Parser</a>, offer a wider selection of functions
   1276     that provide capabilities beyond those provided here.
   1277     The absence of such functions from this package is not meant to
   1278     discourage the development, standardization, or use of such
   1279     functions.
   1280     Rather, their absence reflects the decision to make this package
   1281     contain valid extensions to POSIX, to ensure its broad
   1282     acceptability.
   1283     If more powerful time conversion functions can be standardized, so
   1284     much the better.
   1285   </li>
   1286 </ul>
   1287 </section>
   1288 
   1289 <section>
   1290   <h2 id="stability">Interface stability</h2>
   1291 <p>
   1292 The <code><abbr>tz</abbr></code> code and data supply the following interfaces:
   1293 </p>
   1294 
   1295 <ul>
   1296   <li>
   1297     A set of timezone names as per
   1298       <a href="#naming">Timezone identifiers</a> above.
   1299   </li>
   1300   <li>
   1301     Library functions described in <a href="#functions">Time and date
   1302       functions</a> above.
   1303   </li>
   1304   <li>
   1305     The programs <code>tzselect</code>, <code>zdump</code>,
   1306     and <code>zic</code>, documented in their man pages.
   1307   </li>
   1308   <li>
   1309     The format of <code>zic</code> input files, documented in
   1310     the <code>zic</code> man page.
   1311   </li>
   1312   <li>
   1313     The format of <code>zic</code> output files, documented in
   1314     the <code>tzfile</code> man page.
   1315   </li>
   1316   <li>
   1317     The format of zone table files, documented in <code>zone1970.tab</code>.
   1318   </li>
   1319   <li>
   1320     The format of the country code file, documented in <code>iso3166.tab</code>.
   1321   </li>
   1322   <li>
   1323     The version number of the code and data, as the first line of
   1324     the text file "<code>version</code>" in each release.
   1325   </li>
   1326 </ul>
   1327 
   1328 <p>
   1329 Interface changes in a release attempt to preserve compatibility with
   1330 recent releases.
   1331 For example, <code><abbr>tz</abbr></code> data files typically do not
   1332 rely on recently added <code>zic</code> features, so that users can
   1333 run older <code>zic</code> versions to process newer data files.
   1334 <a href="tz-link.html#download">Downloading
   1335 the <code><abbr>tz</abbr></code> database</a> describes how releases
   1336 are tagged and distributed.
   1337 </p>
   1338 
   1339 <p>
   1340 Interfaces not listed above are less stable.
   1341 For example, users should not rely on particular <abbr>UT</abbr>
   1342 offsets or abbreviations for timestamps, as data entries are often
   1343 based on guesswork and these guesses may be corrected or improved.
   1344 </p>
   1345 
   1346 <p>
   1347 Timezone boundaries are not part of the stable interface.
   1348 For example, even though the <samp>Asia/Bangkok</samp> timezone
   1349 currently includes Chang Mai, Hanoi, and Phnom Penh, this is not part
   1350 of the stable interface and the timezone can split at any time.
   1351 If a calendar application records a future event in some location other
   1352 than Bangkok by putting <samp>Asia/Bangkok</samp> in the events record,
   1353 the application should be robust in the presence of timezone splits
   1354 between now and the future time.
   1355 </p>
   1356 </section>
   1357 
   1358 <section>
   1359   <h2 id="leapsec">Leap seconds</h2>
   1360 <p>
   1361 Leap seconds were introduced in 1972 to accommodate the
   1362 difference between atomic time and the less regular rotation of the earth.
   1363 Unfortunately they have caused so many problems with civil
   1364 timekeeping that there are
   1365 <a href="https://www.bipm.org/en/cgpm-2022/resolution-4">plans
   1366 to discontinue them by 2035</a>.
   1367 Even if these plans come to fruition, a record of leap seconds will still be
   1368 needed to resolve timestamps from 1972 through 2035,
   1369 and there may also be a need to record whatever mechanism replaces them.
   1370 </p>
   1371 
   1372 <p>
   1373 The <code><abbr>tz</abbr></code> code and data can account for leap seconds,
   1374 thanks to code contributed by Bradley White.
   1375 However, the leap second support of this package is rarely used directly
   1376 because POSIX requires leap seconds to be excluded and many
   1377 software packages would mishandle leap seconds if they were present.
   1378 Instead, leap seconds are more commonly handled by occasionally adjusting
   1379 the operating system kernel clock as described in
   1380 <a href="tz-link.html#precision">Precision timekeeping</a>,
   1381 and this package by default installs a <samp>leapseconds</samp> file
   1382 commonly used by
   1383 <a href="https://www.ntp.org"><abbr title="Network Time Protocol">NTP</abbr></a>
   1384 software that adjusts the kernel clock.
   1385 However, kernel-clock twiddling approximates UTC only roughly,
   1386 and systems needing more precise UTC can use this packages leap
   1387 second support directly.
   1388 </p>
   1389 
   1390 <p>
   1391 The directly supported mechanism assumes that <code>time_t</code>
   1392 counts of seconds since the POSIX epoch normally include leap seconds,
   1393 as opposed to POSIX <code>time_t</code> counts which exclude leap seconds.
   1394 This modified timescale is converted to <abbr>UTC</abbr>
   1395 at the same point that time zone and <abbr>DST</abbr>
   1396 adjustments are applied 
   1397 namely, at calls to <code>localtime</code> and analogous functions 
   1398 and the process is driven by leap second information
   1399 stored in alternate versions of the <abbr>TZif</abbr> files.
   1400 Because a leap second adjustment may be needed even
   1401 if no time zone correction is desired,
   1402 calls to <code>gmtime</code>-like functions
   1403 also need to consult a <abbr>TZif</abbr> file,
   1404 conventionally named <samp><abbr>Etc/UTC</abbr></samp>
   1405 (<samp><abbr>GMT</abbr></samp> in previous versions),
   1406 to see whether leap second corrections are needed.
   1407 To convert an applications <code>time_t</code> timestamps to or from
   1408 POSIX <code>time_t</code> timestamps (for use when, say,
   1409 embedding or interpreting timestamps in portable
   1410 <a href="https://en.wikipedia.org/wiki/Tar_(computing)"><code>tar</code></a>
   1411 files),
   1412 the application can call the utility functions
   1413 <code>time2posix</code> and <code>posix2time</code>
   1414 included with this package.
   1415 </p>
   1416 
   1417 <p>
   1418 If the POSIX-compatible <abbr>TZif</abbr> file set is installed
   1419 in a directory whose basename is <samp>zoneinfo</samp>, the
   1420 leap-second-aware file set is by default installed in a separate
   1421 directory <samp>zoneinfo-leaps</samp>.
   1422 Although each process can have its own time zone by setting
   1423 its <code>TZ</code> environment variable, there is no support for some
   1424 processes being leap-second aware while other processes are
   1425 POSIX-compatible; the leap-second choice is system-wide.
   1426 So if you configure your kernel to count leap seconds, you should also
   1427 discard <samp>zoneinfo</samp> and rename <samp>zoneinfo-leaps</samp>
   1428 to <samp>zoneinfo</samp>.
   1429 Alternatively, you can install just one set of <abbr>TZif</abbr> files
   1430 in the first place; see the <code>REDO</code> variable in this packages
   1431 <a href="https://en.wikipedia.org/wiki/Makefile">makefile</a>.
   1432 </p>
   1433 </section>
   1434 
   1435 <section>
   1436   <h2 id="calendar">Calendrical issues</h2>
   1437 <p>
   1438 Calendrical issues are a bit out of scope for a time zone database,
   1439 but they indicate the sort of problems that we would run into if we
   1440 extended the time zone database further into the past.
   1441 An excellent resource in this area is Edward M. Reingold
   1442 and Nachum Dershowitz, <cite><a
   1443 href="https://www.cambridge.org/fr/universitypress/subjects/computer-science/computing-general-interest/calendrical-calculations-ultimate-edition-4th-edition">Calendrical
   1444 Calculations: The Ultimate Edition</a></cite>, Cambridge University Press (2018).
   1445 Other information and sources are given in the file "<code>calendars</code>"
   1446 in the <code><abbr>tz</abbr></code> distribution.
   1447 They sometimes disagree.
   1448 </p>
   1449 </section>
   1450 
   1451 <section>
   1452   <h2 id="planets">Time and time zones off Earth</h2>
   1453 <p>
   1454 The European Space Agency is <a
   1455 href="https://www.esa.int/Applications/Satellite_navigation/Telling_time_on_the_Moon">considering</a>
   1456 the establishment of a reference timescale for the Moon, which has
   1457 days roughly equivalent to 29.5 Earth days, and where relativistic
   1458 effects cause clocks to tick slightly faster than on Earth.
   1459 Also, <abbr title="National Aeronautics and Space Administration">NASA</abbr>
   1460 has been <a
   1461 href="https://bidenwhitehouse.archives.gov/wp-content/uploads/2024/04/Celestial-Time-Standardization-Policy.pdf">ordered</a>
   1462 to consider the establishment of Coordinated Lunar Time (<abbr>LTC</abbr>).
   1463 It is not yet known whether the US and European efforts will result in
   1464 multiple timescales on the Moon.
   1465 </p>
   1466 
   1467 <p>
   1468 Some peoples work schedules have used
   1469 <a href="https://en.wikipedia.org/wiki/Timekeeping_on_Mars">Mars time</a>.
   1470 Jet Propulsion Laboratory (JPL) coordinators kept Mars time on
   1471 and off during the
   1472 <a href="https://en.wikipedia.org/wiki/Mars_Pathfinder">Mars
   1473 Pathfinder</a> mission (1997).
   1474 Some of their family members also adapted to Mars time.
   1475 Dozens of special Mars watches were built for JPL workers who kept
   1476 Mars time during the
   1477 <a href="https://en.wikipedia.org/wiki/Mars_Exploration_Rover">Mars
   1478 Exploration Rovers (MER)</a> mission (20042018).
   1479 These timepieces looked like normal Seikos and Citizens but were adjusted
   1480 to use Mars seconds rather than terrestrial seconds, although
   1481 unfortunately the adjusted watches were unreliable and appear to have
   1482 had only limited use.
   1483 </p>
   1484 
   1485 <p>
   1486 A Mars solar day is called a sol and has a mean period equal to
   1487 about 24 hours 39 minutes 35.244 seconds in terrestrial time.
   1488 It is divided into a conventional 24-hour clock, so each Mars second
   1489 equals about 1.02749125 terrestrial seconds.
   1490 (One MER worker noted, If I am working Mars hours, and Mars hours are
   1491 2.5% more than Earth hours, shouldnt I get an extra 2.5% pay raise?)
   1492 </p>
   1493 
   1494 <p>
   1495 The <a href="https://en.wikipedia.org/wiki/Prime_meridian">prime
   1496 meridian</a> of Mars goes through the center of the crater
   1497 <a href="https://en.wikipedia.org/wiki/Airy-0">Airy-0</a>, named in
   1498 honor of the British astronomer who built the Greenwich telescope that
   1499 defines Earths prime meridian.
   1500 Mean solar time on the Mars prime meridian is
   1501 called Mars Coordinated Time (<abbr>MTC</abbr>).
   1502 </p>
   1503 
   1504 <p>
   1505 Each landed mission on Mars has adopted a different reference for
   1506 solar timekeeping, so there is no real standard for Mars time zones.
   1507 For example, the MER mission defined two time zones Local
   1508 Solar Time A and Local Solar Time B for its two missions, each zone
   1509 designed so that its time equals local true solar time at
   1510 approximately the middle of the nominal mission.
   1511 The A and B zones differ enough so that an MER worker assigned to
   1512 the A zone might suffer Mars lag when switching to work in the B zone.
   1513 Such a time zone is not particularly suited for any application
   1514 other than the mission itself.
   1515 </p>
   1516 
   1517 <p>
   1518 Many calendars have been proposed for Mars, but none have achieved
   1519 wide acceptance.
   1520 Astronomers often use Mars Sol Date (<abbr>MSD</abbr>) which is a
   1521 sequential count of Mars solar days elapsed since about 1873-12-29
   1522 12:00 <abbr>GMT</abbr>.
   1523 </p>
   1524 
   1525 <p>
   1526 In our solar system, Mars is the planet with time and calendar most
   1527 like Earths.
   1528 On other planets, Sun-based time and calendars would work quite
   1529 differently.
   1530 For example, although Mercurys
   1531 <a href="https://en.wikipedia.org/wiki/Rotation_period">sidereal
   1532 rotation period</a> is 58.646 Earth days, Mercury revolves around the
   1533 Sun so rapidly that an observer on Mercurys equator would see a
   1534 sunrise only every 175.97 Earth days, i.e., a Mercury year is 0.5 of a
   1535 Mercury day.
   1536 Venus is more complicated, partly because its rotation is slightly
   1537 <a href="https://en.wikipedia.org/wiki/Retrograde_motion">retrograde</a>:
   1538 its year is 1.92 of its days.
   1539 Gas giants like Jupiter are trickier still, as their polar and
   1540 equatorial regions rotate at different rates, so that the length of a
   1541 day depends on latitude.
   1542 This effect is most pronounced on Neptune, where the day is about 12
   1543 hours at the poles and 18 hours at the equator.
   1544 </p>
   1545 
   1546 <p>
   1547 Although the <code><abbr>tz</abbr></code> database does not support
   1548 time on other planets, it is documented here in the hopes that support
   1549 will be added eventually.
   1550 </p>
   1551 
   1552 <p>
   1553 Sources for time on other planets:
   1554 </p>
   1555 
   1556 <ul>
   1557   <li>
   1558     Michael Allison and Robert Schmunk,
   1559     <a href="https://www.giss.nasa.gov/tools/mars24/help/notes.html">Technical
   1560       Notes on Mars Solar Time as Adopted by the Mars24 Sunclock</a>
   1561     (2020-03-08).
   1562   </li>
   1563   <li>
   1564     Zara Mirmalek,
   1565     <em><a href="https://mitpress.mit.edu/books/making-time-mars">Making
   1566 	Time on Mars</a></em>, MIT Press (March 2020), ISBN 978-0262043854.
   1567   </li>
   1568   <li>
   1569     Jia-Rui Chong,
   1570     <a href="https://www.latimes.com/archives/la-xpm-2004-jan-14-sci-marstime14-story.html">Workdays
   1571     Fit for a Martian</a>, <cite>Los Angeles Times</cite>
   1572     (2004-01-14), pp A1, A20A21.
   1573   </li>
   1574   <li>
   1575     Tom Chmielewski,
   1576     <a href="https://www.theatlantic.com/technology/archive/2015/02/jet-lag-is-worse-on-mars/386033/">Jet
   1577     Lag Is Worse on Mars</a>, <cite>The Atlantic</cite> (2015-02-26)
   1578   </li>
   1579   <li>
   1580     Matt Williams,
   1581     <a href="https://www.universetoday.com/articles/days-of-the-planets">How
   1582     long is a day on the other planets of the solar system?</a>
   1583     (2016-01-20).
   1584   </li>
   1585 </ul>
   1586 </section>
   1587 
   1588 <footer>
   1589 <hr>
   1590 This web page is in the public domain, so clarified as of
   1591 2009-05-17 by Arthur David Olson.
   1592 <br>
   1593 Please send corrections to this web page to the
   1594 <a href="mailto:tz (a] iana.org">time zone mailing list</a>.
   1595 The mailing list and its archives are public,
   1596 so please do not send confidential information.
   1597 </footer>
   1598 </body>
   1599 </html>
   1600