Prečo má Unix svoj vlastný koncept času? Aká je epocha a v čom je problém Y2038?
Unixový čas je prostriedok predstavujúci konkrétny dátum a čas, ktorý používajú systémy Linux, macOS a mnoho ďalších interoperabilných systémov. Je tak rozšírený, že ho pravdepodobne používate bez toho, aby ste o tom vedeli. Len čo pochopíte čas Unixu, spozorujete ho v mnohých kontextoch. Niekoľko nástrojov vám môže pomôcť pri práci s časom Unixu.
Aký je účel unixového času?
Unixový čas je počet celkových sekúnd od pevne stanoveného času a dátumu. Je to formát dátumu a času (alebo časovej pečiatky), ktorý vyzerá inak ako dátumy a časy čitateľné človekom, na ktoré sme zvyknutí. Je to čisto z dôvodu efektívnosti. Uloženie jediného čísla predstavujúceho sekundy zaberie oveľa menej miesta ako uloženie samostatných hodnôt pre rok, mesiac, hodinu atď.
Samozrejme, z moderného hľadiska nie je priestorový rozdiel vôbec taký veľký. Ale zvážte, že Unix vznikol na konci 60. rokov, keď bolo dostupné úložisko oveľa menšie. Časové pečiatky sa tiež často používajú, takže sa ich ukladanie zvyšuje. Napríklad ku každému súboru sú priradené tri časové značky.
Formát je takmer nemožné preložiť do vašej hlavy, pokiaľ nie ste matematický génius. Ale stále má určité výhody oproti čitateľnejším alternatívam, ako je napr St, 21. októbra 2015, 07:28:00 GMT. Dve časové pečiatky Unixu si môžete objednať veľmi ľahko a na prvý pohľad. Zvyčajne je tiež rýchlejšie zistiť rozdiel medzi dvoma časovými značkami. Platí to najmä pre dátumy blízko seba, napríklad v susedné dni.
O epoche
Unixový čas teda predstavuje celkový počet sekúnd od konkrétneho časového bodu. Čo je to však za časový bod? Je 00:00:00 UTC na 1. januára 1970. Toto sa často označuje ako Unixová epocha. Programátori si tento dátum zvolili pre epochu z dôvodu pohodlia, pretože išlo o najtesnejší okrúhly dátum, keď vynašli čas Unix.
Možno ste dobre videli tento dátum, keď sa niečo pokazilo. Je to jednoznačne chyba, ktorá však vyzerá veľmi zvláštne, ak má za následok rande z doby pred narodením mnohých z nás! Je to úplne pochopiteľné, keď viete o čase v systéme Unix. Ak sa akýkoľvek systém pokúša zobraziť časovú pečiatku, ktorá nemá žiadnu hodnotu, bude sa často prekladať do 0 a bude mať za následok presný dátum epochy.
Unixový formát časových údajov
Presne povedané, žiadny neexistuje. Pôvodný dátový typ bol 32-bitové celé číslo a často to tak zostáva, a to aj v oveľa výkonnejších systémoch.
Tento dátový typ umožňuje hodnote uložiť celkovo 2 ^ 32 sekúnd, čo je niečo vyše 136 rokov. Táto hodnota je zvyčajne podpísaná, čo znamená, že môže byť negatívna alebo pozitívna. Zvyčajne to teda predstavuje 68 rokov na obidvoch stranách epochy, t. J. 1902-2038.
Stále je to samozrejme obmedzené obdobie. Ale primárne použitie formátu časovej pečiatky bolo pre koncepty, ako je modifikácia súboru. Bolo veľmi potrebné predstavovať čas blízky súčasnosti, nie dávnej histórii alebo ďaleko do budúcnosti. Aj pre aplikácie, ako sú kalendáre, je zriedka potrebné uvádzať dátumy viac ako niekoľko desaťročí do budúcnosti.
To však neznamená, že toto obmedzené časové obdobie je bez problémov...
Problém roku 2038
Chyba Y2K (jedna z najhorších programovacích chýb v histórii) ovplyvnili počítačové systémy, ktoré ukladali roky ako dvojciferné hodnoty. Keď prišiel rok 2000, takéto systémy s ním zaobchádzali, akoby to bolo v roku 1900. V takom prípade to nebolo také katastrofické, ako sa obávalo, hlavne preto, že veľa ľudí vopred pripravilo veľa času a úsilia.
V jeho legendárnej minulosti tiež kódovanie spôsobilo ničenie. Prípady trochu zlého kódu spôsobili katastrofu na hlavnej úrovni. Nasleduje 10 najhorších programovacích chýb v histórii.
Ak ste dávali pozor v predchádzajúcej časti, mohli ste spozorovať podobný problém, ktorý by mohol ovplyvniť čas Unixu. Unixový čas má vlastný problém s údajmi: problém Y2k38. (Často sa to označuje ako problém, nie chyba; možno sme optimistickejší od roku 2000!) Keď v roku 2038 doslova vyprší čas Unixu, budú systémy považovať nové dátumy buď za roky 1902 alebo 1970. Alebo možno úplne zlyhajú.
Aspoň nás tento problém nezasiahne úderom polnoci na Silvestra. Posledná sekunda 32-bitového Unixového času pripadne na 19. marca. V konečnom dôsledku pravdepodobne inovujeme väčšinu systémov do roku 2038, inak budú zastarané.
Niektoré užitočné zdroje časových značiek
The Prevodník epochy je pravdepodobne najkomplexnejším prevodníkom časových značiek, ktorý je k dispozícii. Začína sa to zobrazením aktuálneho času systému Unix - v reálnom čase - a navyše sa pridáva takmer každá predstaviteľná funkcia. Používa sa hlavne na prevod medzi časovými značkami a dátumami čitateľnými človekom v oboch smeroch.
Dan’s Tools je obrovská zbierka užitočných webových aplikácií, z ktorých jedna je prevodník časových značiek. Je to základnejšie, ale má veľmi čistú prezentáciu a ľahko sa používa.
Time.is predstavuje ďalší, ešte minimalistickejší vzhľad. Zobrazuje čas v mnohých formátoch vrátane času Unixu. To obsahuje aktuálny čas v názve stránky, čo je užitočné.
V systémoch Linux a MacOS dátum program je hlavným nástrojom na prácu s dátumom a časom vrátane časových značiek Unixu. Volá sa bez akýchkoľvek argumentov a vráti aktuálny dátum a čas vo formáte čitateľnom pre človeka:
$ dátum
St 10. februára 12:28:30 GMT 2021
Ak potrebujete aktuálny dátum a čas v Unixovom čase, použite znak +% s argument:
$ date +% s
1612960114
Z dátumu čitateľného človekom môžete previesť pomocou časovej pečiatky -d príznak, ak je vaša verzia dátum podporuje to. Väčšina verzií systému Linux by mala predvolene:
$ date -d "2. január 1970" +% s
82800
V systéme macOS dátum je iný program, ktorý vyžaduje inú sadu príznakov:
$ date -j -f "% b% d% Y% T" "2. januára 1970 00:00:00" "+% s"
82800
Opačným smerom môžete prevádzať z časovej pečiatky Unixu pomocou klávesu -r vlajka:
$ dátum -r 1600000000
Ne 13. septembra 2020 13:26:40 BST
Niektoré ďalšie programy používajú % s formát pre prácu s časom Unixu. Napríklad, ak chcete zobraziť dátum zmeny súboru v Unixovom čase pomocou Linuxová verzia je, môžete použiť nasledujúce:
$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Ako používať Unixový čas v programovacích jazykoch
PHP má čas () funkcia, ktorá vráti aktuálnu časovú značku Unixu. Jeho dátum() funkcia vezme časovú značku ako svoj druhý argument:
$ php -r 'echo date ("Y-m-d", time ());'
2021-02-11
JavaScript pristupuje k veciam zaujímavým spôsobom. Má Date.now () metóda na získanie počtu milisekúnd od epochy Unixu. Môžete to samozrejme vydeliť 1 000 a výsledok zaokrúhliť, aby ste dostali ekvivalentný čas Unixu v sekundách:
> Math.floor (Date.now () / 1000)
1613083012
Pochopenie Unixového času
Unix time je jednoduchý koncept, ktorý sa objavuje na mnohých miestach. Keď to pochopíte, môže sa vám zdať celkom užitočné, napríklad pri výpočte časových rozdielov. Môžete tiež rozpoznať, kedy to môže byť príčinou určitých chýb.
Pojmy ako epocha a časové značky sú dôležitou súčasťou začiatku práce s Linuxom. Ak sa chcete dozvedieť viac o základných potrebách ako napr je, prečítajte si nášho sprievodcu základnými príkazmi systému Linux.
Chcete sa oboznámiť s Linuxom? Začnite s týmito základnými príkazmi Linuxu, aby ste sa naučili štandardné výpočtové úlohy.
- Nešpecifikované
Bobby je technologický nadšenec, ktorý takmer dve desaťročia pracoval ako vývojár softvéru. Je vášnivým hrám, pracuje ako redaktor recenzií v magazíne Switch Player Magazine a je ponorený do všetkých aspektov online publikovania a vývoja webu.
Prihlásiť sa ku odberu noviniek
Pripojte sa k nášmu bulletinu s technickými tipmi, recenziami, bezplatnými elektronickými knihami a exkluzívnymi ponukami!
Ešte jeden krok…!
V e-maile, ktorý sme vám práve poslali, potvrďte svoju e-mailovú adresu.