Čo je to unixový čas a kedy bola unixová epocha?

Čo je to unixový čas a kedy bola unixová epocha?

Prečo má Unix svoj vlastný koncept času? Čo je epocha a v čom je problém Y2038?





Unixový čas je prostriedok na reprezentáciu konkrétneho dátumu a času, ktorý používajú Linux, macOS a mnoho ďalších interoperabilných systémov. Je tak rozšírený, že ho pravdepodobne používate, bez toho, aby ste si to uvedomovali. Keď však porozumiete unixovému času, uvidíte ho v mnohých kontextoch. Pri práci s unixovým časom vám môže pomôcť niekoľko nástrojov.





Aký je účel unixového času?

Unixový čas je celkový počet sekúnd od pevného času a dátumu. Je to formát dátumu/času (alebo časovej pečiatky), ktorý vyzerá odlišne od dátumov a časov, ktoré sú čitateľné pre ľudí, na ktoré sme zvyknutí. Je to čisto z dôvodov účinnosti. Na uloženie jedného čísla predstavujúceho sekundy je potrebné oveľa menej miesta, ako na uloženie oddelených hodnôt za rok, mesiac, hodinu atď.





V moderných pojmoch priestorový rozdiel samozrejme nie je taký veľký. Ale vezmite na vedomie, že Unix vznikol na konci šesťdesiatych rokov minulého storočia, keď bolo dostupné úložisko oveľa menšie. Veľa sa používajú aj časové pečiatky, takže ich ukladanie sa sčítava. Každý súbor má napríklad priradené tri časové pečiatky.

Formát nie je mož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 napr Streda, 21. októbra 2015, 07:28:00 GMT . Dve časové pečiatky Unixu si môžete objednať veľmi jednoducho, na prvý pohľad. Obvykle je tiež rýchlejšie zistiť rozdiel medzi dvoma časovými pečiatkami. To platí najmä pre dátumy blízko seba, napríklad v priľahlé dni.



O epoche

Unixový čas je teda celkový počet sekúnd od určitého časového bodu. Aký je však tento časový bod? To je 00:00:00 UTC na 1. januára 1970 . Toto sa často nazýva epocha Unixu. Programátori si tento dátum vybrali z pohodlného dôvodu, pretože to bol najbližší okrúhly dátum, keď vynašli unixový čas.

Tento dátum ste mohli dobre vidieť, keď sa niečo pokazilo. Je to jednoznačne chyba, ale ktorá vyzerá veľmi zvláštne, keď má za následok dátum spred doby, keď sa mnohí z nás narodili! Je to však úplne pochopiteľné, keď viete o unixovom čase. Ak sa nejaký systém pokúša zobraziť časovú pečiatku, ktorá nemá žiadnu hodnotu, často sa preloží na 0 a vyústi do presného dátumu epochy.





pridať k obrázku ohraničenie

Formát časových údajov Unix

Presne povedané, žiadny neexistuje. Pôvodný typ údajov bol 32-bitové celé číslo a často to platí aj v oveľa výkonnejších systémoch.

Tento typ údajov umožňuje hodnote celkovo uložiť 2^32 sekúnd, čo je viac ako 136 rokov. Táto hodnota je zvyčajne podpísaná, čo znamená, že môže byť záporná alebo kladná. Obvykle to teda predstavuje 68 rokov na oboch stranách epochy, tj. 1902-2038.





Toto je, samozrejme, stále obmedzené obdobie. Primárne sa však formát časovej pečiatky používal pri pojmoch, ako je úprava súboru. Bola veľmi potrebná reprezentácia času blízkeho súčasnosti, nie dávnej histórie alebo ďaleko do budúcnosti. Aj pre aplikácie, ako sú kalendáre, je len zriedka potrebné reprezentovať dátumy viac ako niekoľko desaťročí do budúcnosti.

To však neznamená, že toto obmedzené časové obdobie je bezproblémové ...

Problém roku 2038

Chyba Y2K (jedna z najhorších programovacích chýb v histórii) zasiahla počítačové systémy, ktoré uchovávali roky ako dvojciferné hodnoty. Keď prišiel rok 2000, také systémy to považovali za rok 1900. V prípade, že to nebolo také katastrofické, ako sa obávalo, hlavne preto, že veľa ľudí vopred pripravilo veľa času a úsilia.

Ak ste dávali pozor v predchádzajúcej časti, možno ste zaznamenali podobný problém, ktorý by mohol ovplyvniť čas Unixu. Unixový čas má však svoj vlastný problém s údajmi: problém Y2k38. (Často sa to označuje ako problém, nie chyba; možno sme od roku 2000 začali byť optimistickejší!) Keď v roku 2038 čas Unixu doslova vyprší, systémy budú s novými dátumami zaobchádzať buď ako 1902 alebo 1970. Alebo možno budú Proste celkom zlyhám.

Tento problém nás najmenej nezasiahne o polnoci na Silvestra. Posledná sekunda 32-bitového unixového času pripadne na 19. marca. V prípade potreby pravdepodobne aktualizujeme väčšinu systémov do roku 2038, inak budú do tej doby zastarané.

Niektoré užitočné zdroje časových pečiatok

The Epochový prevodník Stránka je možno najkomplexnejším prevodníkom časových značiek. Začína sa zobrazením aktuálneho unixového času-v reálnom čase-a navyše pridáva takmer všetky predstaviteľné funkcie. Jeho hlavné použitie je na prevod medzi časovými pečiatkami a dátumami čitateľnými pre ľudí, a to v oboch smeroch.

Dan’s Tools je obrovská zbierka užitočných webových aplikácií, z ktorých jedna je a prevodník časových značiek . Je to jednoduchšie, ale má veľmi prehľadnú prezentáciu a ľahko sa používa.

Time.is predstavuje ďalší, ešte minimalistickejší vzhľad. Zobrazuje čas v niekoľkých formátoch, vrátane unixového času. Užitočný je názov aktuálneho času v názve stránky.

Používanie Unix Time s nástrojmi príkazového riadka

V systémoch Linux a macOS je dátum program je základným nástrojom na prácu s dátumom/časom, vrátane časových pečiatok Unixu. Volá sa bez akýchkoľvek argumentov a vracia aktuálny dátum/čas vo formáte čitateľnom pre človeka:

$ date
Wed Feb 10 12:28:30 GMT 2021

Ak potrebujete aktuálny dátum/čas v unixovom čase, použite +%s argument:

$ date +%s
1612960114

Môžete previesť z dátumu čitateľného na človeka na časovú pečiatku pomocou -d označte, ak je vaša verzia dátum podporuje to. Väčšina verzií Linuxu by mala v predvolenom nastavení:

$ date -d 'Jan 2 1970' +%s
82800

V systéme macOS dátum je iný program, ktorý vyžaduje inú sadu vlajok:

$ date -j -f '%b %d %Y %T' 'Jan 02 1970 00:00:00' '+%s'
82800

Ak sa obrátite iným smerom, môžete z časovej pečiatky Unixu prevádzať pomocou -r vlajka:

$ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

Niektoré ďalšie programy používajú príponu %s formát na vyrovnanie sa s unixovým časom. Ak napríklad chcete zobraziť dátum úpravy súboru v unixovom čase, pomocou prípony Linuxová verzia ls , 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á príponu čas () funkcia, ktorá vracia aktuálnu časovú pečiatku Unixu. Jeho dátum() funkcia berie ako druhý argument časovú pečiatku:

$ php -r 'echo date('Y-m-d', time());'
2021-02-11

JavaScript pristupuje k veciam zaujímavým spôsobom. Má a Date.now () metóda na získanie počtu milisekúnd od epochy Unixu. Toto samozrejme môžete rozdeliť na 1 000 a zaokrúhliť výsledok na ekvivalentný unixový čas v sekundách:

> Math.floor(Date.now() / 1000)
1613083012

Pochopenie času Unix

Unix time je jednoduchý koncept, ktorý sa vynára na mnohých miestach. Akonáhle to pochopíte, môže vám to prísť 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é pečiatky sú dôležitou súčasťou začiatku Linuxu. Ak sa chcete dozvedieť viac o základoch ako napr ls , pozrite sa na nášho sprievodcu základnými príkazmi Linuxu.

zdieľam zdieľam Tweet E -mail 9 základných príkazov, ktoré vám pomôžu začať s Linuxom

Chcete sa zoznámiť s Linuxom? Začnite týmito základnými príkazmi Linuxu a naučte sa štandardné počítačové úlohy.

Čítajte ďalej
Súvisiace témy O autorovi Bobby Jack(58 publikovaných článkov)

Bobby je technologický nadšenec, ktorý pracoval ako vývojár softvéru väčšinu dvoch desaťročí. Má nadšenie pre hry, pracuje ako editor recenzií v časopise Switch Player a je ponorený do všetkých aspektov online publikovania a webového vývoja.

Viac od Bobbyho Jacka

prihlásiť sa ku odberu noviniek

Pripojte sa k nášmu bulletinu a získajte technické tipy, recenzie, bezplatné elektronické knihy a exkluzívne ponuky!

Kliknutím sem sa prihlásite na odber