Späť na blog

Sprievodca pre vývojárov k prevodníku Unix časových pečiatok

Ovládnite prevodník Unix timestampu. Naučte sa prevádzať epochový čas na dátumy čitateľné pre ľudí, zaobchádzať s rôznymi jazykmi a vyhnúť sa bežným chybám vývojárov.

Sprievodca pre vývojárov k prevodníku Unix časových pečiatok

A prevodník Unix timestampov je jedným z tých jednoduchých, ale nepostrádateľných nástrojov, po ktorých sa ako vývojár alebo analytik údajov neustále siahate. Je to užitočná utilita, ktorá prekladá dlhé, na prvý pohľad náhodné číslo na dátum a čas, ktorý môžeme skutočne pochopiť. Tento preklad je kľúčový, keď prechádzate systémovými logmi, pracujete s API alebo dotazujete databázy, kde je čas uložený v tomto super efektívnom formáte.

Čo je Unix timestamp a prečo je dôležitý

Digitálny čítač zobrazujúci Unix timestamp 1609459200, spolu s detailmi pre sekundy, milisekundy a mikrosekundy.

Aby ste si naozaj mohli vážiť dobrý prevodník, musíte pochopiť, čo to číslo vlastne je. V jeho jadre je Unix timestamp len bežiaci počet sekúnd. Sleduje celkový počet sekúnd, ktoré uplynuli od 00:00:00 UTC 1. januára 1970. Tento konkrétny okamih v čase je známy ako "Unix epoch".

Prečo táto metóda? Jednoduchosť a efektívnosť. Uloženie času ako jedného celého čísla je oveľa kompaktnejšie a výkonnejšie ako podrobný reťazec ako "Piatok, 1. januára 2021 12:00:00 AM GMT". To ho robí ideálnym pre niekoľko kľúčových oblastí:

  • Ukladanie do databázy: Timestampy sú malé, čo z nich robí rýchle na indexovanie a dotazovanie. Je to obrovské víťazstvo pre výkon.
  • API Payloads: Posielanie jedného čísla tam a späť je oveľa ľahšie na šírku pásma ako posielanie celého dátumového reťazca, čo vedie k rýchlejším časom odpovede.
  • Logy: Keď parsujete logy z desiatok rôznych systémov, mať jednotný, jazykovo agnostický timestamp je záchranca.
  • Výpočty: Potrebujete vedieť, ako dlho proces trval? Stačí odčítať počiatočný timestamp od koncového timestampu. Je to jednoduchá aritmetika s celými číslami.

Sekundy vs. Milisekundy a viac

Klasický Unix timestamp je 10-ciferné číslo predstavujúce sekundy. Ale ako technológia napredovala, potreba presnejšieho merania času rástla. Tu začnete vidieť rôzne dĺžky timestampov, a to je bežná prekážka.

Tu je rýchly prehľad toho, s čím sa typicky stretnete v praxi. Zamieňanie jedného za druhé je klasická chyba "o tisíc" , ktorá môže viesť k veľmi mätúcim chybám.

Bežné formáty Unix timestampov na prvý pohľad

Jednotka Cifry Typický prípad použitia Príklad hodnoty (pre ten istý okamih)
Sekundy 10 Štandard pre väčšinu backend systémov, databáz a API. 1609459200
Milisekundy 13 Veľmi bežné v webových technológiách, najmä JavaScript. 1609459200000
Mikrosekundy 16 Používa sa v obchodovaní s vysokou frekvenciou alebo vedeckom výpočte. 1609459200000000

Mať tieto formáty v poriadku je kľúčové. Ak nástroj očakáva sekundy a vy mu poskytnete milisekundy, dostanete dátum, ktorý je tisíce rokov v budúcnosti. Je to chyba, ktorú sme všetci urobili v nejakom momente!

Slávny problém roku 2038

Elegantná jednoduchosť Unix timestampu vytvorila aj tikajúcu časovú bombu: "problém roku 2038". Na starších 32-bitových systémoch boli timestampy uložené ako podpísané 32-bitové celé číslo. Problém je, že tento typ celého čísla má strop - nemôže držať číslo väčšie ako 2,147,483,647.

Na 19. januára 2038 o 03:14:07 UTC počet sekúnd od epochy prekročí tento limit. Keď sa to stane, celé číslo sa "obráti" a stane sa záporným číslom. To by spôsobilo, že zraniteľné systémy by interpretovali dátum ako späť v 1901, čo by mohlo spôsobiť pád miliárd starých zariadení, ktoré sú stále vonku. Viac informácií o Unix epoch a jej dopade môžete získať od odborníkov zo StrongDM.

Našťastie, toto nie je niečo, čo by sa väčšina z nás musela obávať v každodennom živote. Drvivá väčšina moderných systémov prešla na 64-bitové celé čísla pre meranie času. 64-bitové celé číslo je také obrovské, že sa nepreplní ďalších 292 miliárd rokov, čím sa problém efektívne vyrieši.

Stále je to fantastický kúsok počítačovej histórie a kritická súčasť vedomostí, ak sa niekedy ocitnete pri práci na starších zabudovaných systémoch alebo legacy kódoch. Pochopenie týchto základov robí akýkoľvek prevodník Unix timestampov oveľa mocnejším nástrojom vo vašich rukách.

Uľahčenie konverzií vo vašom prehliadači

Aj keď použitie príkazu v termináli alebo kódu funguje, nie je to vždy najrýchlejší spôsob, ako veci vybaviť. Niekedy potrebujete odpoveď práve teraz, bez toho, aby ste prerušili svoj sústredenie alebo prepli okná. Tu sa naozaj osvedčuje dobrý nástroj založený na prehliadači, najmä venovaný prevodník Unix timestampov, ktorý žije priamo vo vašom prehliadači.

Skutočná mágia spočíva v tom, že zostanete v toku. Predstavte si toto: prechádzate odpoveďou API vo vývojárskych nástrojoch vášho prehliadača a narazíte na timestamp.

Namiesto otvárania ďalšej karty alebo spúšťania terminálu stlačíte rýchlu klávesovú skratku, vložíte číslo a okamžite dostanete odpoveď. To je ten druh bezproblémového pracovného postupu, ktorý získate s nástrojmi ako ShiftShift Extensions, ktoré kombinujú množstvo užitočných utilít do jedného príkazového panela.

Získajte okamžité odpovede s klávesovou skratkou

Všetko sa to zameriava na rýchlosť. S nástrojom ako ShiftShift stačí rýchlo dvakrát stlačiť kláves Shift (alebo Cmd+Shift+P na Macu), aby sa otvoril príkazový panel. Stačí začať písať "timestamp" a konvertor sa objaví. Vložte svoju hodnotu a máte čitateľný dátum na mieste.

Tu je, ako to vyzerá - príkazový panel je pripravený a čaká na konverziu časovej pečiatky priamo nad vašou aktuálnou stránkou.

Najlepšia časť je, ako sa integruje bez toho, aby vám prekážala. Konvertor je len jedným z mnohých nástrojov dostupných v rovnakom prekryte, takže nikdy nemusíte opustiť to, čo robíte.

Tento prístup je záchranou pre vývojárov, testerov a kohokoľvek, kto prakticky žije vo svojom prehliadači. Navyše, konverzia prebieha úplne na vašom zariadení. Citlivé údaje z protokolov alebo odpovedí API nikdy neopustia váš počítač, čo je obrovské víťazstvo pre súkromie.

Možnosť konvertovať časovú pečiatku, preformátovať neprehľadný JSON blob a potom vypočítať časový rozdiel - to všetko z rovnakého rozhrania - je obrovským časovým úsporným opatrením. Premení to neohrabaný, viacnástrojový proces na jednu plynulú akciu.

Viac než len jednooký kôň

Skvelá utilita v prehliadači zriedka predstavuje len jeden nástroj; je súčasťou celého súboru nástrojov. Často sa ocitnete, že používate konvertor časových pečiatok spolu s inými funkciami.

Napríklad, môžete ho skombinovať s:

  • JSON alebo SQL formátovačom, aby ste upravili nejaký kód predtým, než vytiahnete časovú pečiatku.
  • integrovaným kalkulátorom na rýchle matematické operácie s epochovými hodnotami. (Môžete si vyskúšať podobný nástroj na stránke kalkulátora ShiftShift, aby ste videli, ako to funguje).
  • nástrojom na porovnávanie textu, aby ste si všimli rozdiely medzi dvoma odpoveďami API, vrátane časových pečiatok.

Mať všetky tieto základné nástroje na jednom mieste vytvára oveľa rýchlejší a súdržnejší pracovný postup. Nie je to len o pohodlí - ide o odstránenie všetkých tých drobných, opakujúcich sa prerušeniach, ktoré sa sčítavajú a zabíjajú vašu produktivitu počas dňa.

Praktické konverzie časových pečiatok v kóde

Ak ste vývojár, viete, že manipulácia s časovými pečiatkami je len súčasťou práce. Ale buďme úprimní, syntax nikdy nie je úplne rovnaká z jedného jazyka do druhého. Táto sekcia je vašou cheat sheet, plná kódových útržkov, ktoré môžete okamžite použiť na platformách, na ktorých skutočne pracujete. Už žiadne prehľadávanie starých vlákien na Stack Overflow - len praktické príklady, ktoré vás posunú vpred.

Kódové príklady v JavaScripte, Pythone a SQL na konverziu Unix časovej pečiatky.

Či už manipulujete s údajmi na webovom frontende, píšete Python skript alebo dotazujete databázu, konverzia epochového času je základná zručnosť. Prejdeme si najbežnejšie scenáre, od premeny epochového celého čísla na čitateľný reťazec a potom to všetko naopak.

Konverzia časových pečiatok v JavaScripte

Objekt Date v JavaScripte je vaším primárnym nástrojom, ale má jednu veľkú zvláštnosť, ktorá neustále zamieňa vývojárov: funguje v milisekundách, nie v sekundách. Toto je klasický zdroj chýb, keď váš frontend komunikuje s backendom, ktorý používa štandardné 10-ciferné, sekundové časové pečiatky.

Aby ste správne konvertovali štandardnú Unix časovú pečiatku (v sekundách) na objekt Date, musíte ju vynásobiť 1000.

// Štandardná 10-ciferná Unix časová pečiatka (v sekundách)
const unixTimestamp = 1672531200;

// Prevod na milisekundy, potom vytvorenie objektu Date
const dateObject = new Date(unixTimestamp * 1000);

// Formátovanie do čitateľného UTC reťazca
// Výstup: Ne, 01 Jan 2023 00:00:00 GMT
console.log(dateObject.toUTCString());

Potrebujete aktuálnu časovú pečiatku? Date.now() vám ju dá v milisekundách. Len si pamätajte, že pred odoslaním štandardnej 10-ciferné časovej pečiatky späť na API ju musíte vydeliť 1000 a zaokrúhliť nadol.

Manipulácia s konverziami v Pythone

Na backendu je modul datetime v Pythone veľmi silný. Je neuveriteľne flexibilný a má fantastickú podporu pre konverzie zohľadňujúce časové pásma, čo z neho robí spoľahlivú voľbu pre služby, ktoré musia presne manipulovať s časom v rôznych regiónoch.

Tu je jednoduchý spôsob, ako konvertovať časovú pečiatku pomocou knižnice datetime:

import datetime

Štandardná 10-ciferná Unix časová pečiatka

unix_timestamp = 1672531200

Konvertujte časovú pečiatku na objekt datetime

datetime_obj = datetime.datetime.fromtimestamp(unix_timestamp)

Naformátujte ju do čistej, čitateľnej reťazca

Výstup: 2023-01-01 00:00:00

print(datetime_obj.strftime('%Y-%m-%d %H:%M:%S'))
Tento jednoduchý prístup vám poskytuje čistý a spoľahlivý spôsob, ako spravovať epochový čas vo vašich Python aplikáciách. A ak pracujete so zložitými dátovými štruktúrami ako JSON, ktoré obsahujú časové pečiatky, môžete nájsť našu príručku o používaní JSON formátovača užitočnú na ladenie.

Konverzie databáz pomocou SQL

Databázy často ukladajú čas ako Unix časové pečiatky, pretože sú efektívne. Dobrou správou je, že väčšina SQL dialektov má vstavané funkcie na manipuláciu s týmito konverziami priamo vo vašich dotazoch. Toto je oveľa efektívnejšie ako získavanie surových celočíselných časových pečiatok a ich konverzia vo vašom aplikačnom kóde.

Unixová časová pečiatka je takmer univerzálna, používa sa vo viac ako 90% programovacích jazykov—od Date.now() v JavaScripte po time.time() v Pythone—poháňajúca trilióny denných operácií. Správne nastavenie časových zón je kľúčové; kvalitný prevodník unixových časových pečiatok dokáže spracovať viac ako 400 zón IANA, čo pomáha predchádzať chybám v odhadovaných 62% globálnych aplikácií, ktoré explicitne nepracujú s časovými zónami. Viac informácií o globálnej adopcii týchto nástrojov nájdete na Fossa.

Pre vývojárov je schopnosť formátovať SQL, konvertovať časové pečiatky a počítať rozdiely epoch bez toho, aby ste opustili svoj stroj, obrovským prínosom pre produktivitu. Tento prístup zameraný na lokálnosť vás tiež udržuje v súlade so súčasnými štandardmi ochrany osobných údajov, ako sú GDPR a CCPA.

Príklad MySQL

V MySQL sa najčastejšie používa funkcia FROM_UNIXTIME(). Táto funkcia vezme celočíselnú epochu a elegantne ju prevedie do štandardného formátu DATETIME.

SELECT FROM_UNIXTIME(1672531200);
-- Vráti: '2023-01-01 00:00:00'
Ak chcete ísť opačným smerom—z reťazca dátumu späť na časovú pečiatku epochy—jednoducho použite UNIX_TIMESTAMP().

SELECT UNIX_TIMESTAMP('2023-01-01 00:00:00');
-- Vráti: 1672531200

Príklad PostgreSQL

PostgreSQL používa mierne odlišnú, ale rovnako silnú funkciu: to_timestamp(). Táto funkcia priamo konvertuje unixovú časovú pečiatku na hodnotu TIMESTAMP WITH TIME ZONE.

SELECT to_timestamp(1672531200);
-- Vráti: 2023-01-01 00:00:00+00
Pretože je vedomá časovej zóny hneď od začiatku, je to veľmi robustná voľba pre aplikácie, ktoré obsluhujú globálne publikum, kde je presnosť času nevyjednávateľná.

Ovládanie konverzií časových pečiatok v termináli

Ak žijete v príkazovom riadku, prechod na prehliadač alebo GUI na rýchlu konverziu časových pečiatok je skutočným zabijakom pracovného toku. Proste to naruší vašu koncentráciu. Dobrou správou je, že to nemusíte robiť; Linux aj macOS majú silné, natívne nástroje na spracovanie týchto konverzií bez toho, aby ste opustili terminál.

Ideálnym nástrojom na to je skromný príkaz date. Je na prakticky každom unixovom systéme, ale je tu háčik: syntax na jeho použitie ako prevodník unixových časových pečiatok sa líši medzi Linuxom (GNU) a macOS (BSD). Poznať tento rozdiel je kľúčom k tomu, aby ste to vždy urobili správne.

Konverzia časových pečiatok na Linuxe

Na Linuxe je syntax čistá a ľahko zapamätateľná. Stačí použiť prepínač -d na určenie dátumu, ale musíte mu povedať, že poskytujete časovú pečiatku epochy, pred ktorú pridáte symbol @.

Povedzme, že prechádzate protokolmi a narazíte na časovú pečiatku 1704067200. Aby ste videli, čo to vlastne znamená, spustíte toto:

date -d @1704067200

Okamžite dostanete späť dátum v ľudskej čitateľnej forme, niečo ako Mon Jan 1 00:00:00 UTC 2024. Môžete tiež upraviť tento výstup podľa vlastného formátu.

date -d @1704067200 +"%Y-%m-%d %H:%M:%S"

Výstup: 2024-01-01 00:00:00

Tip pre profesionálov: Tento príkaz sa stáva skutočnou silou, keď začnete doň posielať iné príkazy. Môžete grep časovú pečiatku z obrovského protokolového súboru a priamo ju poslať do date na okamžitú konverziu. Premení viacstupňovú úlohu ladenia na jediný elegantný príkaz.

Spracovanie konverzií na macOS

Ak spustíte ten istý príkaz Linuxu na Macu, dostanete chybu. Verzia date pre BSD, ktorú používa macOS, vyžaduje namiesto toho prepínač -r, a nepotrebuje prefix @.

Tu je, ako by ste konvertovali tú istú časovú pečiatku na Macu:

date -r 1704067200

Rovnako ako verzia pre Linux, môžete pridať formátovacie možnosti, aby ste dostali presný výstup, ktorý chcete.

date -r 1704067200 +"%Y-%m-%d %T %Z"

Výstup: 2024-01-01 00:00:00 UTC

Tento malý rozdiel je klasickou prekážkou pre každého, kto často prechádza medzi Linuxom a macOS. Zapamätanie si oboch verzií vám ušetrí množstvo problémov v budúcnosti.

Akonáhle ovládnete tieto príkazy, môžete začleniť konverzie časových pečiatok priamo do svojich shell skriptov a analýzy protokolov. Je to malá zručnosť, ale prispieva k vážnym ziskom produktivity, udržujúc vás v zóne a sústredeného na prácu, ktorá má význam.

Bežné pasce s časovými pečiatkami a ako sa im vyhnúť

Práca s unixovými časovými pečiatkami sa na prvý pohľad zdá byť jednoduchá, ale niekoľko klasických chýb môže viesť k skutočne frustrujúcim chybám. Tieto problémy majú nepríjemný zvyk objavovať sa ďaleko od miesta, kde k chybe skutočne došlo, čo z nich robí skutočnú hlavu bolesť pri ladení. Myslite na túto časť ako na váš sprievodca pri rozpoznávaní a obchádzaní najbežnejších pascí s časovými pečiatkami, ktoré som za tie roky videl.

Zamieňanie sekúnd a milisekúnd

Najčastejšou chybou je zamieňanie sekúnd s milisekundami. Štandardná unixová časová pečiatka je 10-ciferné celé číslo, ktoré predstavuje počet sekúnd od epochy. Mnohé systémy, najmä vo svete JavaScriptu, však pracujú s 13-cifernou časovou pečiatkou pre milisekundy.

Keď front-end aplikácia posiela hodnotu v milisekundách na backend, ktorý očakáva sekundy, veci sa začnú komplikovať.

Pre unix timestamp konvertor vyzerá to 13-ciferné číslo ako dátum tisíce rokov v budúcnosti. To môže potichu narušiť validáciu údajov, logiku plánovania a akékoľvek historické záznamy, ktoré sa snažíte uchovať. Je to druh jemnej korupcie údajov, ktorú si možno ani nevšimnete týždne.

Pasca časových pásiem

Ďalšou pascou, ktorá chytí aj skúsených vývojárov, je spracovanie časových pásiem. Podľa svojej definície je Unix timestamp vždy v koordinovanom svetovom čase (UTC). Predstavuje jeden, univerzálny okamih v čase, úplne nezávislý od miesta. Pasca sa spustí, keď na to zabudnete a predpokladáte, že timestamp odráža miestny čas používateľa.

Táto chyba sa zvyčajne stáva, keď konvertujete timestamp na čitateľný dátum bez špecifikovania časového pásma. Váš systém často predvolí miestny čas servera, čo vedie k chaosu. Používateľ v New Yorku môže vidieť čas určený pre niekoho v Londýne, ale je posunutý o niekoľko hodín.

Zlaté pravidlo je jednoduché: vždy zaobchádzajte s timestampami ako s UTC vo vašom backendu. Ukladajte ich ako UTC, spracovávajte ich ako UTC a konvertujte na miestny čas používateľa iba na front-ende, presne v momente zobrazenia.

Odstraňovanie bežných chýb pri konverzii timestampov

Keď sa veci pokazí, symptómy môžu byť mätúce. Tu je rýchla referenčná tabuľka, ktorú som zostavil z vlastných skúseností, aby som vám pomohol diagnostikovať a opraviť najbežnejšie problémy na počkanie.

Symptóm Pravdepodobná príčina Riešenie
Dátum je v roku 52361 alebo v nejakom inom vzdialenom budúcom. Milisekundy vs. Sekundy. Posielate 13-ciferný timestamp v milisekundách do funkcie, ktorá očakáva 10-ciferný timestamp v sekundách. Pred spracovaním rozdeľte timestamp na 1000. Vždy validujte počet číslic prichádzajúcich timestampov.
Čas je posunutý o niekoľko hodín, ale dátum je správny. Chybné spracovanie časového pásma. Timestamp bol konvertovaný pomocou miestneho času servera namiesto času používateľa alebo UTC. Uistite sa, že všetky konverzie explicitne špecifikujú cieľové časové pásmo. Konvertujte na miestny čas iba na strane klienta.
Dátum je zaseknutý na 1. januára 1970. Neplatný alebo null timestamp. Hodnota timestampu je pravdepodobne 0, null alebo undefined. Pridajte kontrolu, aby ste zabezpečili, že timestamp je platné kladné celé číslo pred pokusom o konverziu. Poskytnite záložnú hodnotu.
Získavanie "Neplatný dátum" alebo chyba NaN. Nesprávny typ údajov. Timestamp sa spracováva ako reťazec alebo iný typ, ktorý nie je číselný, keď je potrebné číslo. Explicitne preveďte timestamp na celé číslo (parseInt() v JS, int() v Pythone) pred jeho použitím v dátových funkciách.

Nezabudnite, rýchla kontrola vstupu vám môže ušetriť hodiny ladenia neskôr.

Vyhnutie sa nejednoznačnosti so štandardnými formátmi

Spoliehanie sa na surové celé čísla timestampov pri prenose údajov medzi systémami môže byť receptom na zmätok. Preto je štandardizácia na univerzálny reťazcový formát ako ISO 8601 (2022-05-17T12:00:00Z) takým skvelým obranným krokom. Konverzia Unix timestampov (napr. 1652905200) na jasný, samodokumentujúci formát ako tento pomáha predchádzať chybám v odhadovaných 37% API volaniach naprieč časovými pásmami.

Keďže 72% spoločností Fortune 500 používa Unix timestampy na analýzu logov, kde jediný prešľap môže stáť viac ako $10,000 za hodinu nečinnosti, presnosť je všetko. Viac informácií o tom, ako sa epochový čas používa v rôznych odvetviach, nájdete na EpochConverter.

Pre tých, ktorí spravujú databázy, je konzistentné spracovanie timestampov rovnako kritické. Ak sa často stretávate s rôznymi formátmi timestampov vo svojej databáze, náš sprievodca o používaní silného SQL formátora vám môže pomôcť udržať vaše dotazy čisté a predvídateľné.

Tento rozhodovací strom vám pomôže vybrať správny príkaz pre váš operačný systém, čím sa vyhnete syntaktickým chybám, keď potrebujete rýchlu konverziu.

Diagram ilustrujúci terminálové príkazy na konverziu timestampov na operačných systémoch Linux a macOS.

Diagram vyššie jasne ukazuje kľúčový syntaktický rozdiel medzi príkazom date na Linuxe (-d @...) a macOS (-r ...)—bežná pasca pre vývojárov pracujúcich v rôznych prostrediach.

Aby ste zabezpečili svoj kód, vždy implementujte kontroly na validáciu dĺžky prichádzajúceho timestampu. Jednoduchá funkcia, ktorá kontroluje, či ide o 10-cifernú (sekundy) alebo 13-cifernú (milisekundy) hodnotu, môže zachytiť tieto chyby skôr, ako otrávia logiku vašej aplikácie.

Bežné otázky o Unix timestampoch

Ako sa naučíte pracovať s Unix timestampami, objaví sa niekoľko praktických otázok. Viděl jsem, jak se tyto otázky dostávají do problémů vývojářů na všech úrovních, takže si ujasněme ty nejběžnější, se kterými se setkáte ve své každodenní práci.

Prečo toľko API používa timestampy namiesto reťazcov ISO 8601?

V skutočnosti ide o surovú efektívnosť. Unix timestamp je len jedno číslo, čo ho robí neuveriteľne kompaktným v porovnaní s reťazcom ako '2023-10-27T10:00:00Z'.

Menšia veľkosť znamená menej údajov na odoslanie cez sieť, čo šetrí šírku pásma a môže urýchliť odpovede API.

Takisto sú úplne nezávislé od jazyka. Nie je tu žiadna nejednoznačnosť, žiadne zvláštnosti pri analýze a žiadne regionálne formátovanie, o ktoré by ste sa museli obávať. Pre stroj je spracovanie čísel vždy rýchlejšie ako analýza reťazcov, takže akékoľvek výpočty dátumov – ako zistenie času medzi dvoma udalosťami – sú výpočtovo lacnejšie. Pre systémy s vysokým výkonom je táto jednoduchosť obrovskou výhodou.

Aký je správny spôsob zaobchádzania s časovými zónami?

Toto je to najdôležitejšie. Tu je zlaté pravidlo: Unixový časový pečiatok je vždy, vždy v UTC. Nemá žiadny koncept časovej zóny zakomponovanej do seba. Je to len surový počet sekúnd od epochy.

Časové zóny sú dôležité len vtedy, keď potrebujete zobraziť túto časovú pečiatku človeku.

Moja rada? Držte sa UTC pre všetko na backendu. Uložte to vo svojej databáze ako UTC časovú pečiatku, prenášajte to cez svoje API v UTC a vykonávajte všetku svoju logiku na serveri v UTC. Jediný čas, kedy by ste to mali previesť na miestnu časovú zónu, je na frontende, tesne predtým, ako to zobrazíte používateľovi. Táto jediná prax vás ušetrí od celého vesmíru chýb súvisiacich s časovými zónami a letným časom.

Mal by som sa stále obávať problému roku 2038?

Pre väčšinu nových projektov pravdepodobne nie. "Problém roku 2038" je pozostatok starších systémov, ktoré používali 32-bitové celé číslo so znamienkom na uloženie časovej pečiatky. Keď sa toto číslo stane príliš veľkým, obtočí sa a stane sa záporným, čím posunie dátumy späť do roku 1901.

Našťastie takmer všetky moderné systémy – od operačných systémov po databázy – už dávno prešli na 64-bitové celé čísla. To efektívne posúva problém tak ďaleko do budúcnosti (v skutočnosti miliardy rokov), že už nie je praktickou starosťou pre nás.

To povedané, ak udržiavate dedičný systém alebo pracujete s zabudovaným hardvérom (myslite na zariadenia IoT), určite je to niečo, na čo by ste mali byť opatrní. Vždy vedzte, na akom type architektúry staviate.

Ako môžem rýchlo previesť časovú pečiatku v Exceli alebo Google Sheets?

Na to nemusíte svoje údaje prenášať do samostatného prevodníka Unixových časových pečiatok. Jednoduchý vzorec to zvládne. Predpokladajme, že vaša časová pečiatka je v bunke A1:

  • Pre časové pečiatky v sekundách (10 číslic): =A1 / 86400 + DATE(1970,1,1)
  • Pre časové pečiatky v milisekundách (13 číslic): =A1 / 86400000 + DATE(1970,1,1)

Jednoducho vložte tento vzorec, potom naformátujte bunku ako "Dátum" alebo "Dátum a čas". Je to záchranca, keď rýchlo analyzujete exporty údajov a nechcete prerušiť svoj tok.


Unavený z neustáleho prepínania medzi svojím editorom, príkazovým riadkom a desiatkami záložiek prehliadača pri jednoduchých úlohách? Sada ShiftShift Extensions obsahuje výkonný prevodník Unixových časových pečiatok, formátovač JSON, vylepšovač SQL a ďalšie priamo vo vašom prehliadači. Všetko, čo potrebujete, je len na dosah klávesnice.

Získajte ShiftShift Extensions a zjednodušte si pracovný tok ešte dnes na https://shiftshift.app

Spomenuté rozšírenia