Miskomprenoj de Programistoj Pri Unikso-Tempo

Mi pardonpetas Patrick McKenzie.

Hieraŭ Danny Mi demandis pri kelkaj interesaj faktoj pri Unikso-tempo, kaj mi memoris, ke foje ĝi funkcias tute neintuicie.

Ĉi tiuj tri faktoj ŝajnas ege raciaj kaj logikaj, ĉu ne?

  1. Unikso-simila tempo estas la nombro da sekundoj ekde la 1-a de januaro 1970 00:00:00 UTC.
  2. Se vi atendas ekzakte unu sekundon, la tempo de Unikso ŝanĝiĝos je ekzakte unu sekundo.
  3. Unikso-simila tempo neniam moviĝas malantaŭen.

Nenio el ĉi tio estas vera.

Sed ne sufiĉas simple diri, "Nenio el ĉi tio estas vera", sen klarigi. kial. Vidu malsupre por klarigoj. Sed se vi volas pensi mem, ne rulu preter la bildo de la horloĝo!

Miskomprenoj de Programistoj Pri Unikso-Tempo
Tablohorloĝo de la 1770-aj jaroj. Kompilis John Leroux. De Bonvenaj kolektoj. Eldonita sub permesilo CC BY

Ĉiuj tri miskompreniĝoj havas unu kialon: supersekundoj. Se vi ne konas supersekundojn, jen rapida referenco:

UTC-tempo estas determinita de du faktoroj:

  • Internacia Atoma Tempo: Mezumaj legaĵoj de centoj da atomhorloĝoj tra la mondo. Ni povas mezuri la duan per la elektromagnetaj ecoj de atomo, kaj ĉi tiu estas la plej preciza mezurado de tempo konata al la scienco.
  • Monda Tempo, surbaze de la rotacio de la Tero ĉirkaŭ sia propra akso. Unu plena revolucio estas unu tago.

La problemo estas, ke ĉi tiuj du nombroj ne ĉiam kongruas. La tera rotacio ne estas konsekvenca – ĝi iom post iom malrapidiĝas, do la tagoj en Universala Tempo plilongiĝas. Aliflanke, atomhorloĝoj estas diable precizaj kaj konstantaj dum milionoj da jaroj.

Kiam du fojojn malsinkronigas, sekundo estas aldonita aŭ forigita de UTC por revenigi ilin en sinkronigon. Ekde 1972 servo IERS (kiu kuras ĉi tiun kazon) aldonis 27 kromajn sekundojn. La rezulto estis 27 UTC-tagoj kun daŭro de 86 sekundoj. Teorie, tago kun daŭro de 401 86 sekundoj (minus unu) eblas. Ambaŭ opcioj kontraŭdiras la fundamentan supozon de Unikso-simila tempo.

Unikso-similaj tempoj supozas ke ĉiu tago daŭras ekzakte 86 sekundojn (400 × 60 × 60 = 24), sen iuj kromaj sekundoj. Se tia salto okazas, tiam Uniksa tempo aŭ saltas unu sekundon, aŭ kalkulas du sekundojn en unu. Aktuale en 86, ĝi mankas 400 supersekundoj.

Do niaj miskomprenoj devas esti kompletigitaj jene:

  • Unikso-simila tempo estas la nombro da sekundoj ekde januaro 1, 1970 00:00:00 UTC minus supersekundoj.
  • Se vi atendas ekzakte unu sekundon, la tempo de Unikso ŝanĝiĝos je ekzakte unu sekundo, krom se la supersekundo estis forigita.

    Ĝis nun, sekundoj neniam estis forigitaj en la praktiko (kaj la malrapidiĝo de la rotacio de la Tero signifas ke tio estas neverŝajna), sed se ĝi iam okazus, tio signifus ke la UTC-tago fariĝus unu sekundo pli mallonga. En ĉi tiu kazo, la lasta sekundo de UTC (23:59:59) estas forĵetita.

    Ĉiu Uniksa tago havas la saman nombron da sekundoj, do la lasta Unikso-sekundo de mallongigita tago ne respondas al iu UTC-tempo. Jen kiel ĝi aspektas, en kvaronsekundaj intervaloj:

    Miskomprenoj de Programistoj Pri Unikso-Tempo

    Se vi komencas je 23:59:58:00 UTC kaj atendos unu sekundon, Unikso-simila tempo antaŭenigos du UTC-sekundojn kaj la Unikso 101 tempomarko estos asignita al neniu.

  • Unikso-simila tempo neniam povas reveni, ĝis supersekundo aldoniĝas.

    Ĉi tio jam okazis 27 fojojn en la praktiko. Ĉe la fino de la UTC-tago, plia sekundo estas aldonita je 23:59:60. Unikso havas la saman nombron da sekundoj en tago, do ĝi ne povas aldoni kroman sekundon - anstataŭe ĝi devas ripeti la tempomarkojn de Unikso por la lasta sekundo. Jen kiel ĝi aspektas, en kvaronsekundaj intervaloj:

    Miskomprenoj de Programistoj Pri Unikso-Tempo

    Se vi komencas je 23:59:60.50 kaj atendas duonsekudon, la Unikso-tempo revenas je duona sekundo, kaj la tempomarko de Unikso 101 egalrilatas al du UTC-sekundoj.

Ĉi tiuj verŝajne ne estas la solaj strangaĵoj de Unikso-similaj tempoj - ĝuste kion mi memoris hieraŭ.

Tempo - tre stranga afero.

fonto: www.habr.com

Aldoni komenton