Počítače Okna Internet

Unix převodník. Aktuální doba epochy Unixu. Jak získat Unix čas v

  • UTC: Čas na hlavním poledníku se nazývá univerzální koordinovaný čas. Nesoulad zkratky byl způsoben potřebou její univerzálnosti pro všechny jazyky.
  • GMT: Dříve byl místo UTC používán greenwichský čas (GMT), protože hlavní poledník byl vybrán k průchodu Královskou observatoří v Greenwichi.
  • Ostatní časová pásma lze zapsat jako offset od UTC. Například australský východní standardní čas (EST) je zapsán jako UTC + 1000, což znamená, že 10:00 UTC je 20:00 EST ve stejný den.
  • Letní čas neovlivňuje UTC. Toto je jen politické rozhodnutí změnit časové pásmo (offset od UTC). GMT se například stále používá: v zimě je britský národní čas. V létě se stává BST.
  • Skok sekundy: Podle mezinárodní úmluvy je UTC udržováno maximálně 0,9 sekundy od fyzické reality (UT1, která se měří ve slunečním čase) zavedením „skokové sekundy“ na konci poslední minuty roku v UTC nebo na poslední minutu června.
  • Skokové sekundy nemusí (astronomové) oznámit více než 6 měsíců před jejich zavedením. To je problém, pokud potřebujete jakékoli druhé přesné plánování na více než 6 měsíců.
  • Unixový čas: Měřeno počtem sekund od „epochy“ (začátek roku 1970 UTC). Unixový čas není ovlivněn časovými pásmy ani letním časem.
  • Podle standardu POSIX.1 má unixový čas zvládnout přestupné sekundy opakováním předchozí sekundy, například: 59,00 59,25 59,50 59,75 59,00 ← opakovat 59,25 59,50 59,75 00,00 ← přírůstek 00,25 Toto je kompromis: nemůžete vyjádřit žádnou přestupnou sekundu v systémových hodinách a váš čas se zaručeně vrátí zpět. Na druhou stranu, každý den je přesně 86 400 sekund a nepotřebujete tabulku všech minulých a budoucích přestupných sekund, abyste převedli unixový čas na lidsky čitelné hodiny-minuty-sekundy.
  • Předpokládá se, že ntpd se pokusí znovu po přijetí skokových bitů z časových serverů proti proudu, ale také jsem viděl, že nic nedělá: systém jde jednu sekundu do budoucnosti a pak se pomalu plíží zpět do správného času.

Co by měl každý programátor vědět o čase

  • Časová pásma odkazují na úroveň prezentace
    Většina vašeho kódu by se neměla zabývat časovými pásmy nebo místním časem, měla by předávat unixový čas tak, jak je.
  • Při měření času změřte unixový čas. Toto je UTC. Je snadné jej získat (pomocí systémových funkcí). Nemá žádná časová pásma ani letní čas (a přestupné sekundy).
  • Když ukládáte čas, ukládejte unixový čas. Toto je jedno číslo.
  • Pokud chcete zachovat lidský čas čitelný (například v protokolech), zkuste ho zachovat spolu s unixovým časem ne namísto.
  • Při zobrazování času vždy zahrňte posun časového pásma. Formát času bez ofsetu je k ničemu.
  • Systémové hodiny nejsou přesné.
  • Jsi online? Systémové hodiny každého jiného stroje nejsou přesné jiným způsobem.
  • Systémové hodiny mohou a budou skákat dopředu a dozadu v důsledku věcí, které jsou mimo vaši kontrolu. Váš program musí být navržen tak, aby to přežil.
  • Poměr počtu sekund systémové hodiny na množství nemovitý sekund není přesná a může se lišit. Záleží hlavně na teplotě.
  • Nepoužívejte slepě gettimeofday (). Pokud chcete monotónní (stále rostoucí) hodiny, podívejte se na clock_gettime (). [Možnost Java: použijte System.nanoTime () namísto System.currentTimeMillis ()]
  • ntpd může změnit systémový čas dvěma způsoby:
    • Krok: hodinky okamžitě skočí vpřed nebo vzad na správný čas
    • Klika: Změňte frekvenci systémových hodin tak, aby se pomalu pohybovala směrem ke správnému času.
    Zkroucení je vhodnější, protože je méně škodlivé, ale je užitečné pouze pro opravu malých rozdílů.

Speciální případy

  • Čas u všech pozorovatelů plyne rychlostí jedné sekundy za sekundu. Frekvence vzdálených hodin ve vztahu k pozorovateli závisí na rychlosti a gravitaci. Hodiny uvnitř satelitů GPS jsou upraveny tak, aby překonávaly efekty relativity.
  • MySQL ukládá sloupce DATETIME jako hodnoty zabalené v číslech „RRRRMMDD HHMMSS“ Pokud vám jde o ukládání časových razítek, uložte je jako celé číslo a pro převod použijte funkce UNIX_TIMESTAMP () a FROM_UNIXTIME ().

Protože v motorové naftě nejsou žádné vestavěné nástroje, vytvoříme následující skript: #! / bin / sh krov datum 2> & 1 | grep ^ čas | awk "(tisk $ 3;)" exit $? nebo nawk "BEGIN (print srand ())" nebo na perl: perl -e "doba tisku," \ n ";" zjistit datum úpravy souboru: truss -v lstat -t lstat ls -l file.txt 2> & 1 1> / dev / null | grep "mt \ = \" | awk "(tisk 9 $;)"

Jak získat unixový čas v ...

Perl čas
PHP čas ()
Rubín Time.now (nebo Time.new). Výstup: Time.now.to_i
Krajta nejprve importujte čas, pak time.time ()
Jáva dlouhá epocha = System.currentTimeMillis () / 1000;
Microsoft .NET C # epocha = (DateTime.Now.ToUniversalTime (). Ticks - 621355968000000000) / 10000000;
VBScript / ASP DateDiff ("s", "01/01/1970 00:00:00", Nyní ())
Erlang kalendář: datetime_to_gregorian_seconds (kalendář: now_to_universal_time (now ())) - 719528 * 24 * 3600.
MySQL SELECT unix_timestamp (now ())
PostgreSQL SELECT extrakt (epocha FROM now ());
SQL Server VYBRAT DATEDIFF (s, „1970-01-01 00:00:00“, GETUTCDATE ())
JavaScript Math.round (new Date (). GetTime () / 1000.0) getTime () vrací čas v milisekundách.
Unix / Linux datum +% s
Jiný OS Příkazový řádek: perl -e „doba tisku“ (pokud je ve vašem systému nainstalován Perl)

Převádění data na unixový čas na ...
PHP mktime ( hodinky, minut, sekundy, Měsíc, den, rok)
Rubín Time.local ( rok, Měsíc, den, hodinky, minut, sekundy, usec) (nebo Time.gm pro výstup GMT / UTC). Chcete -li zobrazit, přidejte .to_i
Krajta nejprve importujte čas, pak int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Jáva dlouhá epocha = nová java.text.SimpleDateFormat ("dd / MM / rrrr HH: mm: ss"). analyzovat ("01/01/1970 01:00:00");
VBScript / ASP DateDiff ("s", "01/01/1970 00:00:00", datové pole)
MySQL VYBRAT unix_timestamp ( čas) Formát času: RRRR-MM-DD HH: MM: SS nebo RRRMDD nebo RRRRMMDD
PostgreSQL VYBRAT výpis (epocha OD data ("2000-01-01 12:34"));
S časovým razítkem: VYBRAT VÝTAH (EPOCH Z ČASOVÉHO ZNAČKY S ČASOVOU ZÓNOU "2001-02-16 20: 38: 40-08"); S intervalem: VYBERTE VÝTAH (EPOCH Z INTERVÁLU „5 dní 3 hodiny“);
SQL Server VYBRAT DATEDIFF (s, „1970-01-01 00:00:00“, datové pole)
Unix / Linux datum +% s -d "1. ledna 1980 00:00:01"

Převod unixového času na datum čitelné pro člověka ...
PHP datum ( Formát, unixový čas);
Rubín Time.at ( unixový čas)
Krajta importujte nejprve čas, pak time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( unixový čas)) Vyměňte time.localtime za time.gmtime za datum GMT.
Jáva Datum řetězce = nový java.text.SimpleDateFormat ("dd / MM / rrrr HH: mm: ss"). Formát (nový java.util.Date ( unixový čas*1000));
VBScript / ASP DateAdd ("s", unixový čas, "01/01/1970 00:00:00")
PostgreSQL VYBERTE ČASOVÝ PAS S ČASOVOU ZÓNOU „epocha“ + unixový čas* INTERVAL „1 sekunda“;
MySQL from_unixtime ( unixový čas, volitelný, výstupní formát) Standardní výstupní formát RRRR-MM-DD HH: MM: SS
SQL Server DATEADD (s, unixový čas, "1970-01-01 00:00:00")
Microsoft Excel = (A1 / 86400) + 25569 Výsledek bude v časovém pásmu GMT. Pro ostatní časová pásma: = ((A1 +/- časový rozdíl pro zónu) / 86400) + 25569.
Linux datum -d @ 1190000000
Jiný OS Příkazový řádek: perl -e "skalární tisk (localtime ( unixový čas)) "(Pokud je nainstalován Perl) Nahraďte" localtime "za" gmtime "pro časové pásmo GMT / UTC.

Co je to unixový čas nebo unixová epocha (unixová epocha nebo unixový čas nebo POSIX čas nebo unixové časové razítko)?

UNIX-time nebo POSIX-time (anglický unixový čas)-způsob kódování času, akceptovaný v UNIXu a dalších operačních systémech kompatibilních s POSIX.
Začátek odpočítávání je považován za půlnoc (UTC) od 31. prosince 1969 do 1. ledna 1970, čas od tohoto okamžiku se nazývá „éra UNIX“ (anglická unixová epocha).
Čas UNIX je konzistentní s UTC, zejména když jsou přestupné sekundy deklarovány jako UTC, odpovídající druhá čísla se opakují.
Metodu ukládání času ve formě několika sekund je velmi výhodné použít při porovnávání dat (přesných s druhým) a také při ukládání dat: v případě potřeby je lze převést do libovolného čitelného formátu. Datum a čas v tomto formátu také zabírají velmi málo místa (4 nebo 8 bajtů, v závislosti na velikosti strojového slova), takže je rozumné jej použít pro ukládání velkého množství dat. Nevýhody výkonu mohou nastat, pokud k datovým prvkům přistupujete velmi často, například k číslu měsíce atd. Ve většině případů je však efektivnější ukládat čas jako jednu hodnotu, nikoli jako sadu polí.

Převedení éry Unixu na datum čitelné lidmi


Datum začátku a konce Unixu v roce, měsíci nebo dni


Převod sekund na dny, hodiny a minuty


Jak získat unixový čas v ...

Perlčas
PHPčas ()
RubínTime.now (nebo Time.new). Výstup: Time.now.to_i
Krajtanejprve importujte čas, pak time.time ()
Jávadlouhá epocha = System.currentTimeMillis () / 1000;
Microsoft .NET C #epocha = (DateTime.Now.ToUniversalTime (). Ticks - 621355968000000000) / 10000000;
VBScript / ASPDateDiff ("s", "01/01/1970 00:00:00", Nyní ())
Erlangkalendář: datetime_to_gregorian_seconds (kalendář: now_to_universal_time (now ())) - 719528 * 24 * 3600.
MySQLSELECT unix_timestamp (now ())
PostgreSQLSELECT extrakt (epocha FROM now ());
SQL ServerVYBRAT DATEDIFF (s, „1970-01-01 00:00:00“, GETUTCDATE ())
JavaScriptMath.round (new Date (). GetTime () / 1000.0) getTime () vrací čas v milisekundách.
Unix / Linuxdatum +% s
Jiný OSPříkazový řádek: perl -e „doba tisku“ (pokud je ve vašem systému nainstalován Perl)

Převádění data na unixový čas na ...

PHPmktime ( hodinky, minut, sekundy, Měsíc, den, rok)
RubínTime.local ( rok, Měsíc, den, hodinky, minut, sekundy, usec) (nebo Time.gm pro výstup GMT / UTC). Chcete -li zobrazit, přidejte .to_i
Krajtanejprve importujte čas, pak int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Jávadlouhá epocha = nová java.text.SimpleDateFormat ("dd / MM / rrrr HH: mm: ss"). analyzovat ("01/01/1970 01:00:00");
VBScript / ASPDateDiff ("s", "01/01/1970 00:00:00", datové pole)
MySQLVYBRAT unix_timestamp ( čas) Formát času: RRRR-MM-DD HH: MM: SS nebo RRRMDD nebo RRRRMMDD
PostgreSQLVYBRAT výpis (epocha OD data ("2000-01-01 12:34"));
S časovým razítkem: VYBRAT VÝTAH (EPOCH Z ČASOVÉHO ZNAČKY S ČASOVOU ZÓNOU "2001-02-16 20: 38: 40-08"); S intervalem: VYBERTE VÝTAH (EPOCH Z INTERVÁLU „5 dní 3 hodiny“);
SQL ServerVYBRAT DATEDIFF (s, „1970-01-01 00:00:00“, datové pole)
Unix / Linuxdatum +% s -d "1. ledna 1980 00:00:01"

Převod unixového času na datum čitelné pro člověka ...

PHPdatum ( Formát, unixový čas);
RubínTime.at ( unixový čas)
Krajtaimportujte nejprve čas, pak time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( unixový čas)) Vyměňte time.localtime za time.gmtime za datum GMT.
JávaDatum řetězce = nový java.text.SimpleDateFormat ("dd / MM / rrrr HH: mm: ss"). Formát (nový java.util.Date ( unixový čas*1000));
VBScript / ASPDateAdd ("s", unixový čas, "01/01/1970 00:00:00")
PostgreSQLVYBERTE ČASOVÝ PAS S ČASOVOU ZÓNOU „epocha“ + unixový čas* INTERVAL „1 sekunda“;
MySQLfrom_unixtime ( unixový čas, volitelný, výstupní formát) Standardní výstupní formát RRRR-MM-DD HH: MM: SS
SQL ServerDATEADD (s, unixový čas, "1970-01-01 00:00:00")
Microsoft Excel= (A1 / 86400) + 25569 Výsledek bude v časovém pásmu GMT. Pro ostatní časová pásma: = ((A1 +/- časový rozdíl pro zónu) / 86400) + 25569.
Linuxdatum -d @ 1190000000
Jiný OSPříkazový řádek: perl -e "skalární tisk (localtime ( unixový čas)) "(Pokud je nainstalován Perl) Nahraďte" localtime "za" gmtime "pro časové pásmo GMT / UTC.

K čemu slouží nástroj „Unixtime Converter“?

Tento nástroj bude především užitečný pro webmastery, kteří se neustále zabývají velkým množstvím dat nebo často odkazují na své prvky ve své práci. Pomocí nástroje „Unixtime Converter“ můžete snadno převést unixový čas na uživatelsky přívětivé datum (a naopak), zjistit aktuální epochový čas Unixu a získat unixový čas v různé jazyky programování, DBMS a operační systémy.

Co je Unix Time?

Unixová éra (epocha Unixu) začala v noci z 31. prosince 1969 na 1. ledna 1970. Právě toto datum bylo vzato jako výchozí bod pro „počítačový“ čas, který se počítá v sekundách a zabírá velmi málo místa na disku - pouze 4 nebo 8 bajtů. Pomocí této metody kódování mohou programátoři „skrýt“ jakékoli datum v jednom čísle a snadno jej převést zpět do formátu, kterému uživatelé rozumí.

Unixový čas (také nazývaný Unixový čas nebo POSIX čas) je vhodný k použití v různých operačních systémech a programovacích jazycích, protože je zobrazen jako jedna hodnota a ne určitý počet polí, která zabírají místo. Čas UNIX navíc plně vyhovuje standardu UTC (včetně přestupných let) - v tomto případě se odpovídající sekundové hodnoty jednoduše opakují.

Unixová terminologie

Několik slov o podmínkách.

Tak, Unixový čas(nebo čas POSIX) je počet sekund, které uplynuly od půlnoci 1. ledna 1970 do současnosti.

Časové razítko Unix(časové razítko) je „pevný“ čas, jinými slovy konkrétní datum vyražené v čísle.

UTC(Universal Coordinated Time) je koordinovaný světový čas, který je „fixován“ na hlavním poledníku a ze kterého se počítají geografická časová pásma.

Jak „odolný“ je systém?

Za pár desítek let, konkrétně 19. ledna 2038 v 03:14:08 UTC, dosáhne unixový čas hodnoty 2147483648 a počítačové systémy mohou toto číslo interpretovat jako záporné. Klíč k vyřešení tohoto problému spočívá v použití 64bitové (namísto 32bitové) proměnné k ukládání času. V tomto případě bude zásoba číselných hodnot unixového času lidstvu stačit na dalších 292 miliard let. Není to špatné, že?

Unixový čas je jeden pro všechny

Pokud žijete v Londýně nebo San Francisku a vaši přátelé jsou v Moskvě, můžete „synchronizovat hodinky“ pomocí unixového času: tento systém je v tento momentčas je jeden pro celý svět. Přirozeně, pokud je čas na serverech nastaven správně. A s nástrojem "Unixtime Converter" tato konverze vám zabere zlomek sekundy.

Tento nástroj je potřebný k převodu data z formátu Unix TimeStamp na datum čitelné člověkem a naopak.

Co je to unixový čas a k čemu se používá? Abych pochopil, k čemu to slouží, začnu obecný koncept co přesně je unixový čas.

Unixový čas (nebo TimeStamp, což v ruštině znamená „časové razítko“ a má stejný význam) je počet sekund od 1. ledna 1970. To znamená, že časové razítko Unixu k 1. 1. 1970 00:00:00 se rovnalo 0. Po 2 minutách (120 sekund) se čas Unixu již rovnal 120. Například o několik dní později (1. 2. 1970) 00:00:00) Unixový čas byl roven 86400, protože uplynulo 60 * 60 * 24 = 86400 sekund. Nyní je časové razítko Unix již 1566148027 a číslo neustále roste, protože sekundy neustále tikají.

Ale proč to používat? Jde o to, že Unix TimeStamp je vhodné používat pro ukládání a manipulaci s daty během programování. Nebudu zacházet do podrobností, ale zkrátka číslo je mnohem pohodlnější ke čtení a porovnávání než řetězec se znaky „vlevo“. To je důvod, proč většina vývojářů používá Unix TimeStamp pro práci s datem ve svých projektech a v databázi často vidíme jedno velmi velké číslo v poli „datum“, které jako datum vůbec nevypadá.

Zde se tento nástroj hodí. S ním můžete toto „velké číslo z databáze“ snadno přeložit do data, které bude čitelné pro člověka. Navíc můžete dokonce udělat opak a proměnit jakékoli datum v Unix TimeStamp. Toto jsou možnosti, kterými je tento převodník vybaven.

Problém roku 2038

Jak jsem řekl, číslo Unixové časové razítko každá sekunda se zvyšuje o 1. Dříve nebo později by měl limit tohoto počtu přijít a bude to jen v roce 2038. Věc je, že maximální počet v 32bitových operačních systémech rozšířených na počátku 21. století je 2 31. To je číslo, kterého Unix TimeStamp dosáhne v roce 2038.

→ Řešení tohoto problému již bylo nalezeno. Aby bylo zajištěno, že v roce 2038 weby nepřestanou správně počítat čas, stačí použít 64bitové operační systém na hostujícím / VDS / dedikovaném serveru, nikoli 32bitovém. S aktivně rostoucími kapacitami počítačů a snižováním jejich nákladů vše směřuje k tomu, že do roku 2038 bude drtivá většina služeb v oblasti poskytování prostoru pro web poskytována na základě 64bitového operačního systému. Mimochodem, v 64bitovém systému se nás takový problém nebude týkat nejméně 292 miliard let, což je pro počítání docela dost problém roku 2038 vyřešeno.

Pouze pro čtenáře Lifeexample je možné otevřít internetový obchod na Moguta.CMS s 15% slevou

Unix Time a Unix Timestamp (MySQL, PHP, JavaScript)

Dobrý den, drazí čtenáři blogů, v tomto článku vám chci říci, co to je Unixový čas a Časové razítko Unix... Programátoři často spojují tyto koncepty do jednoho, ale není to tak úplně pravda. Článek navíc obsahuje mnoho užitečných poznámek na téma práce s Unix Timestamp v PHP, MySQL a JavaScript.

Proč Unix Time začíná 1. ledna 1970

Jde o to, že unixový čas začíná počítat éru Unixu, s vydáním prvního UNIXové systémy... První systém tohoto druhu byl vytvořen v roce 1969, takže vývojáři vzali datum od 1. ledna 1970 o půlnoci UTC ( UTC).

Pojďme pochopit, k čemu slouží Unix time a Unix Timestamp, a dát jim jasné koncepty.

Časové razítko UnixJe časové razítko, což je sekvence znaků představující počet sekund, které uplynuly od 1. ledna 1970.

Pokusím se uvést příklad, abych objasnil rozdíl mezi těmito dvěma pojmy.

V době, kdy jsem psal tento příspěvek, Unixový čas bylo to rovnocenné 1346765877 .

V době čtení od vás tyto informace, záznam o čase ( 1346765877 ) je již štítek - Časové razítko Unix! Převedením tohoto časového razítka do čitelné podoby získáme datum 04-09-2012 a čas 17:37:57.

Upřímně řečeno, podle mě není zvláštní smysl tyto dva pojmy oddělovat, ale přesto je užitečné mít představu o tom, co tvoří Unixový čas a je také užitečné pochopit, že počet maximálních možných sekund od roku 1970 má limit!

Konec éry Unixu přijde v roce 2038

Skutečnost: maximum binární číslo na 32bitových systémech je číslo 01111111 11111111 11111111 11111111 převedením na desítkovou soustavu získáme číslo 2147483647.

19. ledna 2038 v 03:14:08 přijde okamžik, kdy počet sekund, které uplynuly od začátku éry Unixu, překročí maximum dostupné v 32bitovém systému, číslo = 2147483647. Pokud bit přeteče, datum bude resetovat.

Je velmi jednoduché otestovat tuto teorii na názorném příkladu:

  • Otevřete standardní kalkulačku Windows, stiskněte ALT + 3, tím se převede na technické zobrazení;
  • Nastavte režim 4 bajtů a typ desetinného vstupu;
  • Napište číslo 2147483647;

  • Všimněte si binární reprezentace čísla;
  • Přidejte jeden k číslu;

  • Přidání bude mít za následek záporné číslo!

Pokud budeme pokračovat v přidávání jednoho, dostaneme cyklické uzavření.

K tomuto druhu vyzvánění data dojde od 19. ledna 2038 na všech systémech využívajících 32bitovou architekturu.

Ve skutečnosti není třeba smutnit, protože vývojáři výpočetních systémů stále častěji zavádějí 64bitové architektury do širokého používání. Věřme, že do roku 2038 budou včas.

Nyní si promluvíme o použití unixového časového razítka v php, mysql a dokonce i v javascript.

Práce s časovým razítkem unixu

Velmi důležitým bodem při práci s časovým razítkem unixu v php nebo mysql je potřeba jasně pochopit výhody a nevýhody tohoto formátu data.

Například, TIMESTAMP nelze použít k upřesnění historických událostí nebo událostí vzdálené budoucnosti. Celý soubor dat je omezen na období od roku 1970 do začátku roku 2038. Pokud nastavíte datum po roce 2038, nebude 32bitovým systémem interpretováno správně.

Uvědomujíce si toto omezení, vyvstává logická otázka: „ Proč se namáhat se zobrazováním data v sekundách?"

Kdy použít časové razítko Unix

K reprezentaci času v našem obvyklém systému měření je zapotřebí 8 bajtů a pro časové razítko unixu je to poloviční - 4 bajty.

Úspora množství dat je podle mého názoru hlavním a nesporným plusem při používání Unix Time.

Kromě toho existuje při práci s řadou užitečných nuancí Časové razítko UNIX v mysql... A protože všechny informace musí být uloženy na databázovém serveru, a to má zase řadu výhod při práci s Unixovými časovými razítky, výběr směrem k unixovému časovému razítku lze správně odůvodnit následujícími ustanoveními.

MySQL poskytuje vhodný datový typ Timestamp pro práci s unixovým formátem, jehož nastavení okamžitě získáme užitečnou výhodu oproti standardním formátům DATUM a ČAS SCHŮZKY... Výhodou je, že provedením operace přidání nový záznam do tabulky se sloupec s tímto datovým typem vyplní automaticky. To znamená, že můžeme ušetřit nejen na množství dat, ale také na času procesoru webového serveru.

Abychom slovo posílili činy, stanovili jsme následující úkol: při registraci nového uživatele do systému je třeba zadat datum jeho přidání do databáze.

Pokud typ pole ukládajícího datum do tabulky je ČAS SCHŮZKY, poté žádost od Skript PHP bude vypadat nějak takto:

Výhody jsou zřejmé!

Existuje také mínus: pokud existuje několik polí TIMESTAMP, automaticky se aktualizuje pouze první.

Má smysl používat INT místo časového razítka

Mnoho programátorů při práci s časovým razítkem Unixu používá celočíselný formát int (11). Toto je zcela nerozumný přístup k otázce, protože MySQL poskytuje pro typ časového razítka mnoho užitečných funkcí, které ovlivňují rychlost práce s ním. Uložením časového razítka do INT se tedy připravujeme o veškerou podporu serveru pro tento formát. To je zhruba stejné jako ukládání id do typu varchar (11).

Existuje však jedna omluva pro zachování časové razítko unixu na INT... Při přenosu databáze mezi různými DBMS může dojít ke konfliktu typu, tj. u jednoho z DBMS může být typ časového razítka neznámý. V tomto případě bude mít použití int přednost od tento formát je ve všech DBMS.

Stručný popis typů kalendářů MySQL

TIMESTAMP- datový typ pro ukládání data a času. Data jsou uložena jako počet sekund od začátku „éry Unixu“. Rozsah hodnot je 1970-01-01 00:00:00-2038-12-31 00:00:00. Trvá to 4 bajty.

DATUM- datový typ pro uložení data. Rozsah hodnot je 1000-01-01 až 9999-12-31. Trvá to 3 bajty.

ČAS SCHŮZKY- datový typ pro ukládání data a času. Rozsah hodnot je 1000-01-01 00:00:00-9999-12-31 00:00:00. Trvá 8 bajtů a je uloženo jako číslo RRRRMMDDHHMMSS./p>

ROK- datový typ pro uložení roku. Rozsah hodnot je 1901 - 2155. Zabírá 1 bajt.

ČAS- datový typ pro ukládání času. Rozsah je −828: 59: 59 - 828: 59: 59. Trvá to 3 bajty.

Překlad data v unixu

Je čas vyložit několik užitečných funkcí pro překlad data do časové razítko unixu a zpět od unixový čas v čitelném datu.

Jak získat aktuální čas v systému UNIX

  • PHP:

    čas ();

  • JavaScript:

    Math.round (nové Date () .getTime () / 1000.0);

  • MySQL:

    SELECT unix_timestamp (now ());