Keqkuptimet e programuesve rreth Unix Time

kerkoj falje Patrick McKenzie.

Dje Deni Pyeta për disa fakte interesante në lidhje me kohën e Unix, dhe m'u kujtua se ndonjëherë funksionon plotësisht në mënyrë jointuitive.

Këto tre fakte duken jashtëzakonisht të arsyeshme dhe logjike, apo jo?

  1. Koha Unix është numri i sekondave që nga 1 janari 1970 00:00:00 UTC.
  2. Nëse prisni saktësisht një sekondë, koha e Unix-it do të ndryshojë saktësisht me një sekondë.
  3. Koha Unix nuk lëviz kurrë prapa.

Asnjë nga këto nuk është e vërtetë.

Por nuk mjafton thjesht të thuash: "Asgjë nga këto nuk është e vërtetë", pa shpjeguar. pse. Shihni më poshtë për shpjegime. Por nëse doni të mendoni vetë, mos e kaloni foton e orës!

Keqkuptimet e programuesve rreth Unix Time
Orë tavoline e viteve 1770. Përpiluar nga John Leroux. Nga Koleksione të mirëseardhura. Publikuar me licencë CC BY

Të tre keqkuptimet kanë një arsye: sekonda të brishtë. Nëse nuk jeni të njohur me sekondat e brishtë, këtu është një referencë e shpejtë:

Koha UTC përcaktohet nga dy faktorë:

  • Koha Ndërkombëtare Atomike: Leximet mesatare nga qindra orë atomike në mbarë botën. Ne mund ta masim të dytën me vetitë elektromagnetike të një atomi, dhe kjo është matja më e saktë e kohës e njohur për shkencën.
  • Koha Botërore, bazuar në rrotullimin e Tokës rreth boshtit të vet. Një revolucion i plotë është një ditë.

Problemi është se këta dy numra nuk përputhen gjithmonë. Rrotullimi i Tokës nuk është i qëndrueshëm - ngadalësohet gradualisht, kështu që ditët në Kohën Universale bëhen më të gjata. Nga ana tjetër, orët atomike janë jashtëzakonisht të sakta dhe konstante gjatë miliona viteve.

Kur dy herë bien jashtë sinkronizimit, një sekondë shtohet ose hiqet nga UTC për t'i sjellë përsëri në sinkronizim. Që nga viti 1972 shërbim IERS (që drejton këtë rast) shtoi 27 sekonda shtesë. Rezultati ishte 27 ditë UTC me një kohëzgjatje prej 86 sekondash. Teorikisht, një ditë me një kohëzgjatje prej 401 sekondash (minus një) është e mundur. Të dy opsionet kundërshtojnë supozimin themelor të kohës Unix.

Koha Unix supozon se çdo ditë zgjat saktësisht 86 sekonda (400 × 60 × 60 = 24), pa asnjë sekonda shtesë. Nëse ndodh një kërcim i tillë, atëherë koha Unix ose kërcen një sekondë, ose numëron dy sekonda në një. Që nga viti 86, i mungojnë 400 sekonda të kërcimit.

Pra, keqkuptimet tona duhet të plotësohen si më poshtë:

  • Koha Unix është numri i sekondave që nga 1 janari 1970 00:00:00 UTC minus sekondat e kërcimit.
  • Nëse prisni saktësisht një sekondë, koha e Unix-it do të ndryshojë saktësisht me një sekondë, përveç nëse është hequr sekonda e kërcimit.

    Deri më tani, sekondat nuk janë hequr kurrë në praktikë (dhe ngadalësimi i rrotullimit të Tokës do të thotë që kjo nuk ka gjasa), por nëse do të ndodhte ndonjëherë, do të thoshte se dita UTC do të bëhej një sekondë më e shkurtër. Në këtë rast, sekonda e fundit e UTC (23:59:59) hidhet poshtë.

    Çdo ditë Unix ka të njëjtin numër sekondash, kështu që sekonda e fundit Unix e një dite të shkurtuar nuk do të korrespondojë me asnjë kohë UTC. Ja si duket, në intervale çerek sekonde:

    Keqkuptimet e programuesve rreth Unix Time

    Nëse filloni në orën 23:59:58:00 UTC dhe prisni një sekondë, koha e Unix-it do të avancojë dy sekonda UTC dhe vula kohore Unix 101 nuk do t'i caktohet askujt.

  • Koha Unix nuk mund të kthehet kurrë pas, derisa të shtohet një sekondë e brishtë.

    Kjo ka ndodhur tashmë 27 herë në praktikë. Në fund të ditës UTC, shtohet një sekondë shtesë në orën 23:59:60. Unix ka të njëjtin numër sekondash në një ditë, kështu që nuk mund të shtojë një sekondë shtesë - përkundrazi duhet të përsërisë vulat kohore të Unix për sekondën e fundit. Ja si duket, në intervale çerek sekonde:

    Keqkuptimet e programuesve rreth Unix Time

    Nëse filloni në 23:59:60.50 dhe prisni gjysmë sekonde, koha Unix Vjen perseri me gjysmë sekonde, dhe vula kohore Unix 101 korrespondon me dy sekonda UTC.

Këto ndoshta nuk janë të çuditshmet e vetme të kohërave të Unix - vetëm ato që kujtova dje.

Koha - очень gjë e çuditshme.

Burimi: www.habr.com

Shto një koment