Co je čas Unix a kdy byla doba Unixu?

Co je čas Unix a kdy byla doba Unixu?

Proč má Unix svůj vlastní koncept času? Jaká je epocha a v čem je problém Y2038?





Unixový čas je prostředek reprezentující konkrétní datum a čas, používaný Linuxem, macOS a mnoha dalšími interoperabilními systémy. Je tak rozšířený, že jej pravděpodobně používáte, aniž byste si toho byli vědomi. Jakmile však porozumíte unixovému času, uvidíte jej v mnoha kontextech. Při práci s unixovým časem vám může pomoci několik nástrojů.





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

Unixový čas je celkový počet sekund od pevného času a data. Je to formát data/času (nebo časového razítka), který vypadá odlišně od dat a časů čitelných pro člověka, na které jsme zvyklí. To je čistě z důvodů účinnosti. Uložení jednoho čísla představujícího sekundy zabere mnohem méně místa než uložení samostatných hodnot pro rok, měsíc, hodinu atd.





Samozřejmě, v moderních pojmech, prostorový rozdíl není vůbec tak velký. Uvědomte si však, že Unix vznikl na konci šedesátých let minulého století, kdy bylo dostupné úložiště mnohem menší. Hodně se také používají časová razítka, takže se jejich úložiště sčítá. Například ke každému souboru jsou přiřazena tři časová razítka.

Formát je téměř nemožné přeložit v hlavě, pokud nejste matematický génius. Ale stále má některé výhody oproti čitelnějším alternativám, jako je Středa, 21. října 2015 07:28:00 GMT . Můžete si objednat dvě časová razítka Unix velmi snadno, na první pohled. Obvykle je také rychlejší zjistit rozdíl mezi dvěma časovými razítky. To platí zejména pro data blízko sebe, například v přilehlé dny.



O epochě

Unixový čas je tedy celkový počet sekund od určitého časového bodu. Ale jaký je ten časový okamžik? Své 00:00:00 UTC na 1. ledna 1970 . Toto je často označováno jako Unixova epocha. Programátoři vybrali toto datum pro tuto epochu z pohodlí, protože to bylo nejbližší kulaté datum, když vynalezli unixový čas.

Možná jste toto datum viděli, když se něco pokazilo. Je to zjevně chyba, ale která vypadá velmi divně, když má za následek datum z doby před narozením mnoha z nás! Je to však zcela pochopitelné, když víte o unixovém čase. Pokud se některý systém pokouší zobrazit časové razítko, které nemá žádnou hodnotu, často se převede na 0 a vyústí v přesné datum epochy.





co mám upgradovat na mém počítači pro hraní her?

Formát Unix Time Data

Přesně řečeno, žádný neexistuje. Původní datový typ byl 32bitové celé číslo, což často platí i v mnohem výkonnějších systémech.

Tento datový typ umožňuje hodnotě uložit celkem 2^32 sekund, což je něco přes 136 let. Tato hodnota je obvykle podepsána, což znamená, že může být záporná nebo kladná. Obvykle to tedy představuje 68 let na obou stranách epochy, tj. 1902–2038.





To je samozřejmě stále omezené období. Primární použití formátu časového razítka však bylo u konceptů, jako je úprava souboru. Bylo velmi důležité reprezentovat čas blízký současnosti, spíše než dávnou historii nebo daleko do budoucnosti. I pro aplikace, jako jsou kalendáře, je jen zřídka potřeba reprezentovat data více než několik desetiletí do budoucnosti.

To ale neznamená, že toto omezené časové období je bezproblémové ...

Problém roku 2038

Chyba Y2K (jedna z nejhorších chyb v programování v historii) ovlivnila počítačové systémy, které ukládaly roky jako dvouciferné hodnoty. Když přišel rok 2000, takové systémy to považovaly za rok 1900. V případě, že to nebylo tak katastrofické, jak se obávalo, hlavně proto, že mnoho lidí strávilo mnoho času a úsilí předem přípravami.

Pokud jste v předchozí části věnovali pozornost, možná jste zaznamenali podobný problém, který by mohl ovlivnit unixový čas. Unixový čas má svůj vlastní problém s daty: problém Y2k38. (Často je to označováno jako problém, ne chyba; možná jsme se stali optimističtějšími od roku 2000!) Když čas Unixu v roce 2038 doslova vyprší, budou systémy považovat nová data buď za 1902 nebo 1970. Nebo možná oni ' Prostě selže úplně.

Přinejmenším nás tento problém nezasáhne o půlnoci na Silvestra. Poslední vteřina 32bitového unixového času připadne na 19. března. V případě potřeby pravděpodobně upgradujeme většinu systémů do roku 2038, jinak budou do té doby zastaralé.

Některé užitečné zdroje časových razítek

The Převaděč epochy web je možná nejkomplexnější převodník časových značek, který je k dispozici. Začíná zobrazením aktuálního unixového času-v reálném čase-a navíc přidává téměř všechny představitelné funkce. Jeho hlavní použití je pro převod mezi časovými razítky a daty čitelnými lidmi, a to v obou směrech.

Dan’s Tools je obrovská sbírka užitečných webových aplikací, z nichž jedna je a převaděč časových značek . Je to základnější, ale má velmi čistou prezentaci a snadno se používá.

Time.is představuje další, ještě minimalističtější vzhled. Zobrazuje čas v řadě formátů, včetně unixového času. To obsahuje aktuální čas v názvu stránky, což je užitečné.

Použití Unix Time s nástroji příkazového řádku

V systémech Linux a macOS je datum program je základní utilitou pro práci s datem/časem, včetně Unixových časových razítek. Volá se bez jakýchkoli argumentů a vrací aktuální datum/čas ve formátu čitelném pro člověka:

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

Pokud potřebujete aktuální datum/čas v unixovém čase, použijte +%s argument:

$ date +%s
1612960114

Můžete převést z data čitelného na člověka na časové razítko pomocí -d vlajka, pokud vaše verze datum podporuje to. Většina verzí Linuxu by ve výchozím nastavení měla:

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

V systému macOS datum je jiný program, který vyžaduje jinou sadu příznaků:

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

V opačném směru můžete převést z časového razítka Unix pomocí -r vlajka:

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

Některé další programy používají %s formát pro řešení unixového času. Pokud například chcete zobrazit datum změny souboru v unixovém čase, pomocí Linuxová verze ls , můžete použít následující:

$ ls -l --time-style=+%s index.tmp.html
-rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

Jak používat Unix Time v programovacích jazycích

PHP má čas() funkce, která vrací aktuální časové razítko Unixu. Své datum() funkce bere jako druhý argument časové razítko:

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

JavaScript přistupuje k věcem zajímavým způsobem. Má to Date.now () metoda k získání počtu milisekund od epochy Unixu. Samozřejmě to můžete vydělit 1 000 a zaokrouhlit výsledek tak, abyste získali ekvivalentní unixový čas v sekundách:

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

Pochopení času Unix

Unix time je jednoduchý koncept, který se objevuje na mnoha místech. Jakmile to pochopíte, může vám to připadat docela užitečné, například při výpočtu časových rozdílů. Můžete také rozpoznat, kdy to může být příčinou určitých chyb.

Pojmy jako epocha a časová razítka jsou důležitou součástí začátků s Linuxem. Chcete -li se dozvědět více o základech, jako je ls , podívejte se na náš průvodce základními příkazy Linuxu.

Podíl Podíl tweet E-mailem 9 základních příkazů, které vám pomohou začít s Linuxem

Chcete se seznámit s Linuxem? Začněte s těmito základními příkazy Linuxu a naučte se standardní výpočetní úlohy.

Číst dále
Související témata O autorovi Bobby Jack(58 článků zveřejněno)

Bobby je technologický nadšenec, který pracoval jako vývojář softwaru po téměř dvě desetiletí. Je zapálený pro hraní her, pracuje jako editor recenzí časopisu Switch Player Magazine a je ponořen do všech aspektů online publikování a webového vývoje.

Více od Bobbyho Jacka

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru