baza de date tz - tz database

Baza de date tz împarte lumea în regiuni în care ceasurile locale au fost, din 1970, la fel. Această hartă, realizată prin combinarea ediției 2017a a bazei de date cu datele OpenStreetMap , este din toate regiunile din afara Antarcticii.

Baza de date tz este o compilație colaborativă de informații despre fusurile orare ale lumii , destinată în principal utilizării cu programe de calculator și sisteme de operare. Paul Eggert este actualul său editor și întreținător, cu sprijinul organizațional al ICANN . Baza de date tz este, de asemenea, cunoscută sub numele de tzdata , baza de date zoneinfo sau baza de date a fusurilor orare IANA și, ocazional, ca bază de date Olson , referindu-se la contribuitorul fondator, Arthur David Olson.

Convenția sa uniformă de denumire pentru fusurile orare, cum ar fi America / New_York și Europa / Paris , a fost proiectată de Paul Eggert. Baza de date încearcă să înregistreze fusurile orare istorice și toate modificările civile din 1970, epoca Unix . De asemenea, include tranziții, cum ar fi ora de vară , și înregistrează, de asemenea, câteva secunde .

Baza de date, precum și un anumit cod sursă de referință , se află în domeniul public . Noile ediții ale bazei de date și ale codului sunt publicate conform modificărilor, de obicei de mai multe ori pe an.

Structură de date

Formate de fișiere

Baza de date tz este publicată ca un set de fișiere text care listează regulile și tranzițiile de zone într-un format lizibil de către om. Pentru utilizare, aceste fișiere text sunt compilate într-un set de fișiere binare independente de platformă - unul pe fus orar. Codul sursă de referință include un astfel de compilator numit zic (compilator de informații despre zonă), precum și cod pentru a citi aceste fișiere și a le utiliza în API-uri standard precum localtime()și mktime().

Definiția unui fus orar

În baza de date tz, un fus orar este orice regiune națională în care ceasurile locale au fost de acord din 1970. Această definiție se referă mai întâi la zonele geografice care au avut ceasuri locale consistente. Acest lucru este diferit de alte definiții care se referă la compensări consistente de la un meridian primar . Prin urmare, fiecare dintre fusurile orare definite de baza de date tz poate documenta mai multe compensări de la UTC , incluzând de obicei atât ora standard, cât și ora de vară .

În fișierele text de fus orar, fiecare fus orar are una sau mai multe „linii de fus” într-unul dintre fișierele text de fus orar. Prima linie de zonă pentru un fus orar dă numele fusului orar; orice linie de zonă ulterioară pentru acel fus orar lasă numele necompletat, indicând faptul că se aplică aceleiași zone ca linia anterioară. Fiecare linie de zonă pentru o zonă specifică, pentru un interval de dată și oră, decalarea la UTC pentru ora standard, numele setului de reguli care guvernează ora de vară (sau o cratimă dacă se aplică întotdeauna ora standard), formatul pentru abrevierile de fus orar și, pentru toate, cu excepția ultimei linii de zone, data și ora la care se termină intervalul de dată și oră guvernat de acea linie.

Regulile orei de vară (DST)

Regulile pentru ora de vară sunt specificate în seturi de reguli numite. Fiecare set de reguli are una sau mai multe linii de regulă în fișierele text de fus orar. O linie de regulă conține numele setului de reguli căruia îi aparține, primul an în care se aplică regula, ultimul an în care se aplică regula (sau „numai” dacă se aplică numai într-un an sau „maxim” dacă este regula în vigoare în prezent), tipul de an la care se aplică regula („-” dacă se aplică tuturor anilor din intervalul specificat, ceea ce este aproape întotdeauna cazul, altfel un nume folosit ca argument pentru un script care indică dacă anul este de tipul specificat), luna în care regula intră în vigoare, ziua în care regula intră în vigoare (care ar putea fi fie o zi specifică, fie o specificație precum „ultima duminică a lunii”) , ora din zi la care regula intră în vigoare, cantitatea de timp de adăugat la offset la UTC când regula este în vigoare și litera sau literele de utilizat în abrevierea fusului orar (de exemplu, „S” dacă regula guvernează ora standard și „D” dacă guvernează ora de vară).

Numele fusurilor orare

Fusele orare au nume unice sub forma „ Zona / Locație ”, de exemplu „America / New_York”. De asemenea, s-a făcut alegerea utilizării numelor în engleză sau a echivalentelor sale și a omiterii punctuației și a sufixelor comune. Caracterul de subliniere este folosit în locul spațiilor. Cratimele sunt folosite acolo unde apar în numele unei locații. Numele zonei și locației au o lungime maximă de 14 caractere.

Zonă

Zona este numele unui continent , ocean sau „Etc”. Continentele și oceanele utilizate în prezent sunt Africa , America , Antarctica , Arctica , Asia , Atlantic , Australia , Europa , India și Pacific .

Oceanele sunt incluse, deoarece unele insule sunt greu de conectat la un anumit continent. Unele sunt legate geografic de un continent și politic de altul. A se vedea, de asemenea, Limitele dintre continente .

Zona specială „Etc” este utilizată pentru unele zone administrative, în special pentru „Etc / UTC” care reprezintă Timpul Universal Coordonat . Pentru a se conforma stilului POSIX , acele nume de zone care încep cu „Etc / GMT” au semnul inversat din convenția standard ISO 8601 . În zona „Etc”, zonele de la vest de GMT au un semn pozitiv, iar cele de la est au un semn negativ în numele lor (de exemplu, „Etc / GMT-14” este cu 14 ore înaintea GMT).

Locație

Locația este numele unei locații specifice din zonă - de obicei un oraș sau o insulă mică.

Numele de țări nu sunt utilizate în această schemă, în primul rând pentru că nu ar fi robuste, din cauza schimbărilor politice și de graniță frecvente. Numele orașelor mari tind să fie mai permanente. De obicei, cel mai populat oraș dintr-o regiune este ales pentru a reprezenta întregul fus orar, deși un alt oraș poate fi selectat dacă este mai cunoscut și o altă locație, inclusiv o altă locație decât un oraș, poate fi utilizată dacă are ca rezultat o nume mai puțin ambiguu. În cazul în care numele locației utilizate pentru a reprezenta fusul orar se schimbă, convenția este de a crea un alias în edițiile viitoare, astfel încât atât numele vechi, cât și cele noi se referă la aceeași intrare a bazei de date.

În unele cazuri, locația este ea însăși reprezentată ca un nume compus, de exemplu, fusul orar „ America / Indiana / Indianapolis ”. Numele pe trei niveluri includ cele de sub „America / Argentina / ...”, „America / Kentucky / ...”, „America / Indiana / ...” și „America / North_Dakota / ...”.

Locația selectată este reprezentativă pentru întreaga zonă. Cu toate acestea, dacă au existat diferențe în zonă înainte de 1970, regulile fusului orar se aplică numai în locația numită.

Exemple

America / Costa_Rica numele țării utilizate deoarece numele celui mai mare oraș (și capital) San José este ambiguu
America / New_York Spațiul înlocuit cu sublinierea
Asia / Calcutta numele orașului Kolkata folosit, deoarece era cel mai populat oraș din zonă la momentul înființării zonei, deși acest lucru nu mai este adevărat
Asia / Sahalin numele insulei folosite, deoarece cel mai mare oraș, Yuzhno-Sakhalinsk , are mai mult de 14 caractere
America / Bahia_Banderas „de” eliminat din Bahia de Banderas , deoarece numele corect are mai mult de 14 caractere
Antarctica / DumontDUrville apostroful este îndepărtat. Spațiul ar fi înlocuit în mod normal cu „_”, dar numele ar depăși apoi 14 caractere.

Exemplu de linie de zonă și regulă

Acestea sunt linii de reguli pentru regulile standard de vară din Statele Unite, linii de reguli pentru regulile de vară în vigoare în Fusul Orar de Est al SUA (numit „NYC” deoarece New York City este orașul care reprezintă zona respectivă) în câțiva ani, și linii de zonă pentru fusul orar America / New_York, începând cu versiunea de lansare tzdata2011n a bazei de date cu fus orar. Zona și liniile de regulă reflectă istoria orei de vară în Statele Unite .

# Rule  NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER/S
Rule    US      1918    1919    -       Mar     lastSun 2:00    1:00    D
Rule    US      1918    1919    -       Oct     lastSun 2:00    0       S
Rule    US      1942    only    -       Feb     9       2:00    1:00    W # War
Rule    US      1945    only    -       Aug     14      23:00u  1:00    P # Peace
Rule    US      1945    only    -       Sep     30      2:00    0       S
Rule    US      1967    2006    -       Oct     lastSun 2:00    0       S
Rule    US      1967    1973    -       Apr     lastSun 2:00    1:00    D
Rule    US      1974    only    -       Jan     6       2:00    1:00    D
Rule    US      1975    only    -       Feb     23      2:00    1:00    D
Rule    US      1976    1986    -       Apr     lastSun 2:00    1:00    D
Rule    US      1987    2006    -       Apr     Sun>=1  2:00    1:00    D
Rule    US      2007    max     -       Mar     Sun>=8  2:00    1:00    D
Rule    US      2007    max     -       Nov     Sun>=1  2:00    0       S
....
# Rule  NAME    FROM    TO      TYPE    IN      ON      AT      SAVE    LETTER
Rule    NYC     1920    only    -       Mar     lastSun 2:00    1:00    D
Rule    NYC     1920    only    -       Oct     lastSun 2:00    0       S
Rule    NYC     1921    1966    -       Apr     lastSun 2:00    1:00    D
Rule    NYC     1921    1954    -       Sep     lastSun 2:00    0       S
Rule    NYC     1955    1966    -       Oct     lastSun 2:00    0       S
# Zone  NAME            GMTOFF  RULES   FORMAT  [UNTIL]
Zone America/New_York   -4:56:02 -      LMT     1883 November 18, 12:03:58
                        -5:00   US      E%sT    1920
                        -5:00   NYC     E%sT    1942
                        -5:00   US      E%sT    1946
                        -5:00   NYC     E%sT    1967
                        -5:00   US      E%sT

Date stocate pentru fiecare zonă

Pentru fiecare fus orar care are mai multe compensări (de obicei din cauza orei de vară), baza de date tz înregistrează momentul exact al tranziției. Formatul poate găzdui și schimbări în datele și orele tranzițiilor. Este posibil ca zonele să aibă modificări istorice ale regulilor care datează de mai multe decenii (așa cum se arată în exemplul de mai sus).

Zone.tab

Fișierul zone.tab se află în domeniul public și listează zonele. Coloanele și sortarea rândurilor sunt descrise în comentariile fișierului, după cum urmează:

# This file contains a table with the following columns:
# 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
# 2.  Latitude and longitude of the zone's principal location
#     in ISO 6709 sign-degrees-minutes-seconds format,
#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
#     first latitude (+ is north), then longitude (+ is east).
# 3.  Zone name used in value of TZ environment variable.
# 4.  Comments; present if and only if the country has multiple rows.
#
 # Columns are separated by a single tab.
# The table is sorted first by country, then an order within the country that
# (1) makes some geographical sense, and
# (2) puts the most populous zones first, where that does not contradict (1).

Date înainte de 1970

Datele înainte de 1970 își propun să fie corecte pentru orașul care identifică regiunea, dar nu sunt neapărat corecte pentru întreaga regiune. Acest lucru se datorează faptului că noi regiuni sunt create numai după cum este necesar pentru a distinge ceasurile începând cu 1970.

De exemplu, între 1963-10-23 și 1963-12-09 în Brazilia, numai statele Minas Gerais , Espirito Santo , Rio de Janeiro și São Paulo aveau oră de vară. Cu toate acestea, o despărțire solicitată de America / Sao_Paulo a fost respinsă în 2010, motivând că, din 1970, ceasurile erau aceleași în întreaga regiune.

Ora din Germania , reprezentată de Europa / Berlin , nu este corectă pentru anul 1945, când Trizone a folosit reguli de vară diferite de cele de la Berlin.

Acoperire

Zonele care acoperă mai multe țări post-1970

Există două zone care acoperă o zonă care a fost acoperită de două țări după 1970. Baza de date urmărește definițiile țărilor conform ISO 3166-1 , al cărui predecesor, ISO 3166, a fost publicat pentru prima dată în 1974.

întreținere

Codul de referință tz și baza de date sunt întreținute de un grup de voluntari. Arthur David Olson face cele mai multe modificări ale codului, iar Paul Eggert în baza de date. Modificările propuse sunt trimise la lista de discuții tz, care este la comp.time.tz directate catre grupul de știri Usenet . Fișierele sursă sunt distribuite prin intermediul serverului FTP IANA. De obicei, aceste fișiere sunt preluate de un distribuitor de software cum ar fi Debian , compilate, iar apoi sursa și binarele sunt ambalate ca parte a acestei distribuții. Utilizatorii finali se pot baza fie pe procedurile de actualizare a distribuției lor software, care pot atrage o anumită întârziere, fie pot obține sursa direct și pot construi singuri fișierele binare. IETF a publicat RFC  6557 , „Proceduri pentru menținerea Time Zone baza de date“ documentarea cele mai bune practici bazate pe principii similare.

Sisteme de tip Unix

Calea standard pentru baza de date a fusului orar este / usr / share / zoneinfo / în distribuțiile Linux, macOS și alte sisteme similare Unix .

Utilizare și extensii

Limitele fusurilor orare

Limitele geografice sub formă de seturi de coordonate nu fac parte din baza de date tz, dar limitele sunt publicate de Eric Muller sub formă de poligoane vectoriale. Folosind aceste poligoane vectoriale, se poate determina, pentru fiecare loc de pe glob, zona bazei de date tz în care se află.

Utilizare în alte standarde

Unicode Common Locale Data Repository (CLDR) se referă la zone din baza de date tz. Cu toate acestea, deoarece numele unei zone se poate schimba de la o versiune de bază de date tz la alta, CLDR atribuie UN / LOCODE pentru orașul utilizat în numele zonei sau un cod atribuit intern dacă nu există un astfel de oraș pentru zone, către o zonă tzdb.

Utilizare în sisteme software

Baza de date tz este utilizată pentru procesarea fusului orar și conversii în multe sisteme software de calculator, inclusiv:

ID-urile de fus orar Olson sunt, de asemenea, folosite de Unicode Common Locale Data Repository (CLDR) și Componente internaționale pentru Unicode (ICU). De exemplu, tabelul CLDR Windows – Tzid mapează ID-urile de fus orar Microsoft Windows la numele standard Olson, deși o astfel de mapare nu poate fi perfectă, deoarece numărul de fusuri orare din sistemele Windows este semnificativ mai mic decât cele din baza de date IANA TZ.

Istorie

Originile proiectului datează din 1986 sau mai devreme.

Procesul din 2011

La 30 septembrie 2011, un proces, Astrolabe, Inc. împotriva Olson și colab. , a fost depus cu privire la drepturile de autor din baza de date. Drept urmare, la 6 octombrie 2011, lista de corespondență a bazei de date și site-ul FTP au fost închise. Cazul se învârtea în jurul utilizării de către întreținătorii bazei de date a American Atlas , de Thomas G. Shanks , și The International Atlas , de Thomas G. Shanks și Rique Pottenger. S-a plâns de reproducerea neautorizată a datelor atlas în arhiva listei de corespondență a fusului orar și în unele colecții de legături auxiliare întreținute cu baza de date, deși nu a indicat de fapt către baza de date în sine. Plângerea se referea doar la compilarea datelor istorice ale fusului orar și nu acoperea tabelele actuale ale fusului orar tzdata mondial.

Acest proces a fost soluționat la 22 februarie 2012, după implicarea Fundației electronice de frontieră , când Astrolabe s-a mutat în mod voluntar pentru a respinge procesul fără să fi servit vreodată inculpații și a fost de acord cu un pact care să nu dea în judecată în viitor.

Mutați la ICANN

ICANN și-a asumat responsabilitatea pentru întreținerea bazei de date la 14 octombrie 2011. Baza de date completă și o descriere a planurilor actuale și viitoare pentru întreținerea acesteia sunt disponibile online de la IANA .

Vezi si

Referințe

linkuri externe

General

Surse oficiale IANA

Pagini de mana

  • zic(8) -  Linux Administration and Privileged Commands Manual (oferă sintaxa fișierelor sursă pentru baza de date tz)
  • tzfile(5) -  Linux File Formats Manual (oferă formatul fișierelor bazei de date tz compilate)