← Všechny nástroje

Převodník Unix timestamp

Převádějte Unix timestamp na datum a zpět okamžitě v prohlížeči. Zjistěte, co je epoch time, sekundy a milisekundy, úskalí UTC i problém roku 2038.

Unixové časové značky bez bolení hlavy

Zeptejte se tří vývojářů, kolik je hodin, a možná dostanete tři odpovědi, podle toho, kde zrovna sedí. Zeptejte se unixové časové značky a dostanete přesně jedno číslo, stejné pro každého na planetě. Právě toto jediné celé číslo je důvod, proč epochální čas tiše stojí v základu téměř každého logovacího souboru, řádku v databázi a odpovědi API, se kterými se kdy setkáte. Tato stránka vysvětluje, co toto číslo znamená, jak ho číst v obou směrech a kde nejčastěji láme lidem vaz.

Zářící hodiny rozpouštějící se do proudu světelných číslic, reprezentující unixový epochální čas
Epochální čas je jediný čítač tikající vpřed od roku 1970.

Co je unixový čas ve skutečnosti

Unixová časová značka je počet sekund, které uplynuly od 00:00:00 UTC 1. ledna 1970, bez počítání přestupných sekund. Tento okamžik se nazývá epocha a raní vývojáři Unixu ho vybrali jednoduše proto, že to bylo pohodlné kulaté datum, od kterého se dá počítat. V epoše je hodnota přesně 0. Každá sekunda od té doby přidá jedničku, takže číslo jen roste. Data před rokem 1970 jsou také naprosto platná, vyjádřená jako záporná celá čísla.

Tomuto konceptu se také říká POSIX čas nebo volně epochální čas. Ať už je označení jakékoliv, mechanika je stejná: jeden neustále rostoucí čítač sekund. Protože jde o obyčejné celé číslo, ne o formátovaný řetězec, počítač ho dokáže uložit na pár bajtech a dvě takové hodnoty porovnat jediným odečtením.

Sekundy, milisekundy a příbuzní

Klasický unixový čas počítá celé sekundy, což dává známé desetimístné číslo, jaké vídáte dnes. Řada prostředí ale potřebuje jemnější rozlišení. JavaScript například pracuje v milisekundách, čímž vzniká třináctimístná hodnota, a některé systémy jdou ještě dál, do mikrosekund nebo nanosekund. Spolehlivé pravidlo: desetimístné číslo jsou sekundy, třináctimístné jsou milisekundy. Pokud vám převedené datum vyjde někde kolem roku 1970, zatímco jste čekali dnešek, téměř jistě jste do pole pro sekundy vložili milisekundy, nebo naopak. Náš převodník velikost automaticky rozpozná, takže málokdy musíte hádat.

Proč se na něj vývojáři spoléhají

Velkou výhodou je, že časová značka je nezávislá na časovém pásmu. Celé číslo 1735689600 odkazuje na stejný okamžik v Tokiu, Berlíně i São Paulu. Uložení tohoto čísla místo naformátovaného lokálního řetězce znamená, že se nikdy nemusíte ptát, ke kterým hodinám hodnota patřila. Řazení je také triviální, protože chronologické pořadí je jednoduše číselné pořadí, takže databázový index nad sloupcem s časovou značkou seřadí události správně bez jakéhokoliv parsování. Stejně čistá je i aritmetika: rozdíl mezi dvěma událostmi je jedno odečtení a přidání jednoho dne znamená přičíst 86400. Tyto vlastnosti jsou přesně důvodem, proč logy, tokeny, cache i frontové systémy sahají po epochálním čase.

Převod oběma směry

Převod z časové značky na čitelné datum znamená vzít počet sekund a promítnout ho na kalendář, poté ho naformátovat v časovém pásmu, které vás zajímá. Opačně vezmete rok, měsíc, den a čas, rozhodnete, ve kterém časovém pásmu je vyjádřen, a sbalíte ho zpět na sekundy od epochy. Náš nástroj zvládá oba směry okamžitě a zcela ve vašem prohlížeči, takže nic z toho, co vložíte, neopustí váš počítač. Vložte číslo pro dekódování, nebo vyberte datum pro zakódování, a výsledek si přečtěte současně v UTC i ve vašem lokálním čase.

Zářící stuha časové osy se značkou klouzající podél proudícího toku epochálních sekund
Jedna značka na jedné časové ose, čitelná jak v UTC, tak v lokálním čase.

UTC versus lokální čas, klasická past

Samotná časová značka nemá žádné časové pásmo; je vždy ukotvena k UTC. Zmatek se objeví, teprve když ji zobrazíte. Pokud převedete 1700000000 a vaše obrazovka ukáže večerní hodinu, zatímco kolega v jiné zemi vidí odpoledne, nic není rozbité, jen se oba díváte na stejný okamžik vykreslený jinými lokálními hodinami. Chyby se vkrádají, když kód čte lokální datum, jako by bylo UTC, nebo když razítko použije čas na zdi bez zaznamenání posunu. Bezpečným zvykem je ukládat a přenášet UTC a lokální posun uplatnit až v úplně poslední chvíli, kdy hodnotu zobrazujete člověku. Pokud si nejste jisti, porovnávejte proti řádku UTC v převodníku, ne proti tomu svému lokálnímu.

Problém roku 2038

Řada starších systémů ukládala unixový čas jako znaménkové 32bitové celé číslo. Toto pole dojde místo jednu sekundu po 03:14:07 UTC 19. ledna 2038, kdy čítač přeteče a obrátí se na záporné číslo, což může data vrátit zpět až do roku 1901. Jde o stejnou rodinu problémů jako Y2K. Dobrou zprávou je, že moderní operační systémy a jazyky se z velké části přesunuly na 64bitové časové značky, které nepřetečou zhruba 292 miliard let, takže pro nový kód jde spíš o historickou zajímavost, kterou se vyplatí znát, než o skutečnou hrozbu.

Další pomocníky běžící v prohlížeči najdete v našich nástrojích pro vývojáře, a pokud potřebujete pracovat přímo s čísly, kalkulačky jsou jen kliknutí daleko.

Často kladené otázky

Co je unixová časová značka?

Je to počet sekund od 00:00:00 UTC 1. ledna 1970, bez počítání přestupných sekund. Tento počáteční okamžik se nazývá epocha a čítač se v čase pouze zvyšuje.

Proč se mé číslo převede na datum blízko roku 1970?

Nejspíš jste zaměnili sekundy a milisekundy. Desetimístné číslo jsou sekundy, třináctimístné jsou milisekundy. Vložení milisekund do pole pro sekundy vydělí zdánlivý čas zhruba tisícem, čímž se dostanete blízko epochy.

Má unixová časová značka časové pásmo?

Ne. Hodnota je vždy ukotvena k UTC. Časové pásmo přichází na řadu, teprve když časovou značku zobrazíte jako čitelné datum, a proto může totéž číslo ukazovat různým lidem různý čas na hodinách.

Jak převedu datum zpět na časovou značku?

Zadejte rok, měsíc, den a čas, rozhodněte, ve kterém časovém pásmu je toto datum vyjádřeno, a nástroj ho sbalí na sekundy od epochy. Oba směry zvládnete na této stránce okamžitě přímo v prohlížeči.

Co je problém roku 2038?

Systémy, které ukládají unixový čas jako znaménkové 32bitové celé číslo, přetečou jednu sekundu po 03:14:07 UTC 19. ledna 2038. Moderní 64bitové časové značky se tomuto problému vyhýbají na miliardy let dopředu, takže se současného softwaru většinou netýká.

Odesílají se má data na server?

Ne. Převod probíhá zcela ve vašem prohlížeči, takže jakákoliv časová značka nebo datum, které vložíte, zůstává na vašem vlastním zařízení.