Unixový čas ( anglicky Unix time , také POSIX time ) je systém pro popis okamžiků v čase, přijatý v Unixu a dalších operačních systémech kompatibilních s POSIX . Definováno jako počet sekund od půlnoci (00:00:00 UTC ) 1. ledna 1970 (čtvrtek); tento okamžik se nazývá "Unix Epoch" ( angl. Unix Epoch ).
Unixový čas je reprezentován celým číslem , které se zvyšuje s každou další sekundou bez nutnosti výpočtů k určení roku, měsíce, dne, hodiny nebo minuty pro lidskou čitelnost. Moderní unixový čas je v souladu s UTC - odpočítávání je v SI sekundách . Časové rozpětí jednoho dne je téměř vždy rozděleno na 86 400 sekund , ale když jsou deklarovány přestupné sekundy, je to 86 401 sekund . Takové sekundy, podle Universal Time , udržují délku dnů synchronizovanou s časem planetární revoluce. V Unixovém čase se odpovídající sekundová čísla opakují, tj. přestupné sekundy se nepočítají.
V 00:00:00 UTC 1. ledna 1970 (čtvrtek) je unixový čas nula. Od této doby se počet zvyšuje o určitou částku za den. Tak například 16. září 2004 v 00:00:00, 12 677 dní po začátku unixového času, bude čas 12677 × 86400 = 1095292800 , nebo v případě 17. prosince 2003 v 00:00:00 12403 dní po začátku odpočítávání bude čas číslo 12403 × 86400 = 1 071 619 200 . Výpočty lze provádět i obráceně pomocí záporných čísel. Například datum 4. října 1957 00:00:00, což je 4472 dní před začátkem odpočítávání, je v unixovém čase reprezentováno číslem −4472 × 86400 = −386380800 [1] .
Každý den se číslo představující unixový čas vypočítává tak, jak je popsáno v UTC (00:00:00Z), a od půlnoci se zvyšuje přesně o 1 za sekundu . Časový okamžik 16-09-2004 17:55: 43.54 odpovídající 64 543,54 sekundám od půlnoci tohoto data z výše uvedeného příkladu bude tedy v unixovém čase reprezentován číslem 1 095 292 800 + 64 543,54 = 1 543 095 . U dat předcházejících začátku odpočítávání se číslo také zvyšuje, to znamená, že se časem blíží nule [2] .
Použitý celočíselný systém je vhodný pro porovnávání a ukládání dat (datum a čas v tomto formátu zabere pouze 4 nebo 8 bajtů ). Pokud potřebujete odkazovat na prvky data (den, měsíc, rok), sekundy lze převést do jakéhokoli vhodného formátu (a naopak).
Programy používají k ukládání unixového času typ celé číslo se znaménkem . 32bitová čísla se znaménkem mohou odkazovat na časy od pátku 13. prosince 1901, 20:45:52 do úterý 19. ledna 2038, 03:14:07 včetně.
Chcete-li získat aktuální čas Unixu na většině systémů podobných Unixu, můžete použít příkaz date +%s .
Minimální datum v podepsaném 32bitovém zápisu je 13. prosince 1901 , 20:45:52 UTC (0x80000000, −2 147 483 648 sekund od 1. ledna 1970).
Potenciálně kritické datum bylo 9. září 2001 , 01:46:40 UTC , odpovídající jedné gigasekundě (miliardě sekund) unixovému času, kdy desetinná reprezentace znaků přesáhla 9 pozic, což by mohlo ovlivnit provoz některých lékařských aplikací [3] .
Hlavním kritickým datem z pohledu unixového času je 19. leden 2038 v 03:14:08 UTC, kdy hodnota proměnné typu time_tpočítající počet sekund uplynulých od 1. ledna 1970 dosahuje 2 31 , což může vést k chybné interpretaci tohoto čísla jako záporného . Komplex rizik spojených s tímto datem byl nazýván problémem roku 2038 . Možným řešením tohoto problému je použít pro ukládání času nikoli 32bitovou , ale 64bitovou proměnnou (což se děje ve všech moderních 64bitových operačních systémech), to bude stačit na 292 miliard let [4] .
64bitová zařízení Apple iOS mají problém jako systém Unix: pokud nastavíte čas na 64bitovém zařízení se systémem iOS na jednu ráno 1. ledna 1970 a restartujete zařízení v časovém pásmu od UTC + 1:30 a více, pak se po restartu zařízení nezapne, na obrazovce se bude neustále zobrazovat logo Apple. To se děje kvůli rozdílu v časových pásmech, to znamená: pokud převedete čas na 1:00 1. ledna 1970 v časovém pásmu UTC +1:30 nebo více, pak se počítadlo času Unixu dostane do mínusu, což systém není schopen pochopit , protože odpočítávání je od UTC, v důsledku čehož zařízení zamrzne. Zařízení není obnoveno přes DFU, ale problém má dvě řešení jinými způsoby. První způsob: počkejte, až se baterie telefonu úplně vybije a počítadlo se samo vynuluje. Druhý způsob: rozeberte zařízení a na chvíli odpojte baterii, poté zařízení znovu složte, počítadlo se také vynuluje a zařízení bude fungovat.
Problém je konečně vyřešen v iOS 9.3.1 [5] - nyní je možné na zařízení nastavit datum počínaje 1. lednem 2001.