Unix online. ora UNIX. Ce este ora Unix

Acest instrument este necesar pentru a converti o dată din formatul Unix TimeStamp într-o dată care poate fi citită de om și invers.

Ce este ora Unix și pentru ce se folosește? Pentru a înțelege de ce se folosește acest lucru, voi începe cu conceptul general despre ceea ce este timpul Unix.

Ora Unix (sau TimeStamp, care tradus în rusă înseamnă „ștampilă de timp” și are același sens) este numărul de secunde care au trecut de la 1 ianuarie 1970. Adică, marcajul de timp Unix la ora 01/01/1970 00:00:00 era egal cu 0. După 2 minute (120 de secunde), ora Unix era deja 120. De exemplu, o zi mai târziu (01/02 /1970 00:00:00) ora Unix este deja egală cu 86400, deoarece au trecut 60*60*24=86400 secunde. Acum, marca temporală Unix este deja 1561815370 și numărul crește constant, deoarece secundele bifează constant.

Dar de ce să-l folosești? Chestia este că Unix TimeStamp este convenabil de utilizat pentru stocarea și manipularea datelor la programare. Nu voi intra în detalii, dar pe scurt, un număr este mult mai convenabil de numărat și comparat decât un șir cu caractere „stânga”. Acesta este motivul pentru care majoritatea dezvoltatorilor folosesc Unix TimeStamp pentru a lucra cu datele din proiectele lor, iar în baza de date vedem adesea un număr foarte mare în câmpul `date`, care nu arată deloc ca o dată.

Acesta este locul în care acest instrument este util. Cu el, puteți traduce cu ușurință acel „număr mare din baza de date” într-o dată care poate fi citită de om. În plus, poți chiar să faci opusul și să transformi orice dată într-un marcaj de timp Unix. Acestea sunt capabilitățile cu care este dotat acest convertor.

Problema din 2038

După cum am mai spus, numărul Marca temporală Unix cu fiecare secundă crește cu 1. Mai devreme sau mai târziu trebuie să vină limita acestui număr și va fi în 2038. Chestia este că numărul maxim în sistemele de operare pe 32 de biți obișnuite la începutul secolului 21 este 231. Acesta este numărul pe care Unix TimeStamp îl va atinge în 2038.

→ O soluție la această problemă a fost deja găsită. Pentru a vă asigura că site-urile nu opresc urmărirea corectă a timpului în 2038, este suficient să folosiți un sistem de operare pe 64 de biți pe serverul de găzduire/VDS/dedicat, și nu unul pe 32 de biți. Odată cu creșterea rapidă a puterii computerelor și scăderea costului acestora, totul se îndreaptă către faptul că până în 2038 marea majoritate a serviciilor din domeniul furnizării de spațiu pentru un site web vor fi furnizate pe baza unui sistem de operare pe 64 de biți. Apropo, într-un sistem pe 64 de biți, o astfel de problemă nu ne va afecta cel puțin 292 de miliarde de ani, ceea ce este suficient pentru a lua în considerare problema anului 2038 rezolvat.

Deoarece Nu există instrumente încorporate în motorină, creăm următorul script: #!/bin/sh truss date 2>&1 |grep ^time |awk "(print $3;)" exit $? sau nawk "BEGIN(print srand())" sau în Perl: perl -e "print time, "\n";" aflați data modificării fișierului: truss -v lstat -t lstat ls -l file.txt 2>&1 1>/dev/null | grep "mt\ =\" | awk "(printați $9;)"

Cum să obțineți ora Unix în...

Perl timp
PHP timp()
Rubin Time.now (sau Time.new). Pentru a ieși: Time.now.to_i
Piton mai întâi import time, apoi time.time()
Java epocă lungă = System.currentTimeMillis()/1000;
Microsoft .NET C# epoca = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASP DataDiff("s", "01/01/1970 00:00:00", Now())
Erlang calendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(now()))-719528*24*3600.
MySQL SELECT unix_timestamp(acum())
PostgreSQL SELECT extract(epoca DIN acum());
SQL Server SELECTARE DATEDIFF(e, „1970-01-01 00:00:00”, GETUTCDATE())
JavaScript Math.round(new Date().getTime()/1000.0) getTime() returnează timpul în milisecunde.
Unix/Linux data +%s
Alt sistem de operare Linia de comandă: perl -e „timp de imprimare” (dacă Perl este instalat pe sistemul dumneavoastră)

Se transformă data în ora Unix în...
PHP mktime( ceas, minute, secunde, lună, zi, an)
Rubin Time.local( an, lună, zi, ceas, minute, secunde, usec) (sau Time.gm pentru ieșirea GMT/UTC). Pentru a scoate add.to_i
Piton import mai întâi, apoi int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Java epocă lungă = new java.text.SimpleDateFormat("zz/LL/aaaa HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASP DataDiff("s", "01/01/1970 00:00:00", câmp de dată)
MySQL SELECT unix_timestamp( timp) Format oră: AAAA-LL-ZZ HH:LL:SS sau AAAMMZZ sau AAAAMMZZ
PostgreSQL SELECT extras(epoch FROM data("2000-01-01 12:34"));
Cu timestamp: SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE "2001-02-16 20:38:40-08"); Cu interval: SELECT EXTRACT(EPOCH FROM INTERVAL "5 zile 3 ore");
SQL Server SELECTARE DATEDIFF(e, "1970-01-01 00:00:00", câmp de dată)
Unix/Linux data +%s -d"1 ianuarie 1980 00:00:01"

Conversia timpilor Unix în date care pot fi citite de om...
PHP Data( Format, timp unix);
Rubin Ora.la( timp unix)
Piton importa mai întâi ora, apoi time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( timp unix)) Înlocuiți time.localtime cu time.gmtime pentru data GMT.
Java String date = new java.text.SimpleDateFormat("zz/LL/aaaa HH:mm:ss").format(new java.util.Date ( timp unix*1000));
VBScript/ASP DataAdd("s", timp unix, "01/01/1970 00:00:00")
PostgreSQL SELECTARE TIMESTAMP CU FUS ORAR „epoch” + timp unix* INTERVAL „1 secundă”;
MySQL din_unixtime( timp unix, opțional, format de ieșire) Format standard de ieșire AAA-LL-ZZ HH:MM:SS
SQL Server DATEADD(e, timp unix, "1970-01-01 00:00:00")
Microsoft Excel =(A1 / 86400) + 25569 Rezultatul va fi în fusul orar GMT. Pentru alte fusuri orare: =((A1 +/- diferența de timp pentru zonă) / 86400) + 25569.
Linux data -d @1190000000
Alt sistem de operare Linia de comandă: perl -e "print scalar(localtime( timp unix))" (Dacă Perl este instalat) Înlocuiți „ora locală” cu „ora gm” pentru fusul orar GMT/UTC.

Ce este ora Unix sau epoca Unix (epoca Unix sau ora Unix sau ora POSIX sau marcajul temporal Unix)?

Ora UNIX sau ora POSIX este o metodă de codificare a timpului adoptată în UNIX și alte sisteme de operare compatibile cu POSIX.
Punctul de plecare este considerat a fi miezul nopții (UTC) din 31 decembrie 1969 până la 1 ianuarie 1970, ora din acest moment fiind numită „era UNIX” (Epoca Unix în engleză).
Ora UNIX este în concordanță cu UTC, în special, atunci când sunt declarate secunde intermitente UTC, se repetă numerele secunde corespunzătoare.
Metoda de stocare a timpului sub forma unui număr de secunde este foarte convenabilă de utilizat atunci când se compară datele (exacte cu secunda), precum și pentru stocarea datelor: dacă este necesar, acestea pot fi convertite în orice format care poate fi citit de om. Data și ora în acest format ocupă, de asemenea, foarte puțin spațiu (4 sau 8 octeți, în funcție de dimensiunea cuvântului mașinii), așa că este rezonabil să le folosiți pentru stocarea unor cantități mari de date. Dezavantajele de performanță pot apărea atunci când elementele date, cum ar fi numerele lunii etc., sunt accesate foarte frecvent. Dar, în majoritatea cazurilor, este mai eficient să stocați timpul ca o singură valoare decât o colecție de câmpuri.

Conversia epocii Unix într-o dată care poate fi citită de om


Data de început și de sfârșit Unix a anului, lunii sau zilei


Conversia secundelor în zile, ore și minute


Cum să obțineți ora Unix în...

Perltimp
PHPtimp()
RubinTime.now (sau Time.new). Pentru a ieși: Time.now.to_i
Pitonmai întâi import time, apoi time.time()
Javaepocă lungă = System.currentTimeMillis()/1000;
Microsoft .NET C#epoca = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASPDataDiff("s", "01/01/1970 00:00:00", Now())
Erlangcalendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(now()))-719528*24*3600.
MySQLSELECT unix_timestamp(acum())
PostgreSQLSELECT extract(epoca DIN acum());
SQL ServerSELECTARE DATEDIFF(e, „1970-01-01 00:00:00”, GETUTCDATE())
JavaScriptMath.round(new Date().getTime()/1000.0) getTime() returnează timpul în milisecunde.
Unix/Linuxdata +%s
Alt sistem de operareLinia de comandă: perl -e „timp de imprimare” (dacă Perl este instalat pe sistemul dumneavoastră)

Se transformă data în ora Unix în...

PHPmktime( ceas, minute, secunde, lună, zi, an)
RubinTime.local( an, lună, zi, ceas, minute, secunde, usec) (sau Time.gm pentru ieșirea GMT/UTC). Pentru a scoate add.to_i
Pitonimport mai întâi, apoi int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Javaepocă lungă = new java.text.SimpleDateFormat("zz/LL/aaaa HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASPDataDiff("s", "01/01/1970 00:00:00", câmp de dată)
MySQLSELECT unix_timestamp( timp) Format oră: AAAA-LL-ZZ HH:LL:SS sau AAAMMZZ sau AAAAMMZZ
PostgreSQLSELECT extras(epoch FROM data("2000-01-01 12:34"));
Cu timestamp: SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE "2001-02-16 20:38:40-08"); Cu interval: SELECT EXTRACT(EPOCH FROM INTERVAL "5 zile 3 ore");
SQL ServerSELECTARE DATEDIFF(e, "1970-01-01 00:00:00", câmp de dată)
Unix/Linuxdata +%s -d"1 ianuarie 1980 00:00:01"

Conversia timpilor Unix în date care pot fi citite de om...

PHPData( Format, timp unix);
RubinOra.la( timp unix)
Pitonimporta mai întâi ora, apoi time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( timp unix)) Înlocuiți time.localtime cu time.gmtime pentru data GMT.
JavaString date = new java.text.SimpleDateFormat("zz/LL/aaaa HH:mm:ss").format(new java.util.Date ( timp unix*1000));
VBScript/ASPDataAdd("s", timp unix, "01/01/1970 00:00:00")
PostgreSQLSELECTARE TIMESTAMP CU FUS ORAR „epoch” + timp unix* INTERVAL „1 secundă”;
MySQLdin_unixtime( timp unix, opțional, format de ieșire) Format standard de ieșire AAA-LL-ZZ HH:MM:SS
SQL ServerDATEADD(e, timp unix, "1970-01-01 00:00:00")
Microsoft Excel=(A1 / 86400) + 25569 Rezultatul va fi în fusul orar GMT. Pentru alte fusuri orare: =((A1 +/- diferența de timp pentru zonă) / 86400) + 25569.
Linuxdata -d @1190000000
Alt sistem de operareLinia de comandă: perl -e "print scalar(localtime( timp unix))" (Dacă Perl este instalat) Înlocuiți „ora locală” cu „ora gm” pentru fusul orar GMT/UTC.

Pentru ce este necesar instrumentul „Unixtime Converter”?

Acest instrument va fi util în primul rând webmasterilor care se ocupă în mod constant de volume mari de date sau se referă adesea la elementele lor în munca lor. Folosind instrumentul „Unixtime Converter”, puteți converti cu ușurință ora Unix într-o dată ușor de utilizat (și invers), puteți afla ora actuală a epocii Unix și, de asemenea, puteți obține ora Unix în diferite limbaje de programare, SGBD și sisteme de operare.

Ce este ora Unix?

Era Unix (epoca Unix) a început în noaptea de 31 decembrie 1969 spre 1 ianuarie 1970. Această dată a fost luată ca punct de plecare al timpului „calculator”, care este calculat în secunde și ocupă foarte puțin spațiu pe disc - doar 4 sau 8 octeți. Cu această metodă de codare, programatorii pot „ascunde” orice dată într-un singur număr și o pot converti cu ușurință înapoi într-un format pe care utilizatorii îl pot înțelege.

Ora Unix (numită și timp Unix sau timp POSIX) este convenabil de utilizat în diferite sisteme de operare și limbaje de programare, deoarece este afișat ca o singură valoare, mai degrabă decât un anumit număr de câmpuri care ocupă spațiu. În plus, ora UNIX respectă pe deplin standardul UTC (inclusiv în anii bisecți) - în acest caz, valorile secunde corespunzătoare sunt pur și simplu repetate.

Terminologie Unix

Câteva cuvinte despre termeni.

Asa de, Ora Unix(sau ora POSIX) este numărul de secunde care au trecut de la miezul nopții de 1 ianuarie 1970 până în prezent.

Marca temporală Unix(marca temporală) este o oră „fixă”, cu alte cuvinte, o dată specifică imprimată într-un număr.

UTC(Timpul Universal Coordonat) este Timpul Universal Coordonat, care este „fix” la meridianul principal și din care sunt numărate fusurile orare geografice.

Cât de „durabil” este acest sistem?

În doar câteva decenii, și anume pe 19 ianuarie 2038 la 03:14:08 UTC, ora Unix va atinge valoarea 2147483648, iar sistemele informatice pot interpreta acest număr ca fiind negativ. Cheia pentru rezolvarea acestei probleme este utilizarea unei variabile pe 64 de biți (în loc de 32 de biți) pentru a stoca ora. În acest caz, furnizarea de valori numerice ale timpului Unix va dura omenirea încă 292 de miliarde de ani. Nu-i rău, nu?

Ora Unix este una pentru toată lumea

Dacă locuiți la Londra sau San Francisco, iar prietenii tăi locuiesc la Moscova, atunci îți poți „verifica ceasurile” folosind ora Unix: acest sistem este în prezent același pentru întreaga lume. Desigur, dacă ora de pe servere este setată corect. Și cu ajutorul unui instrument „Convertor Unixtime” Această conversie vă va dura o fracțiune de secundă.

Doar pentru cititorii Lifeexample este posibil să deschidă un magazin online pe Moguta.CMS cu o reducere de 15%

Ora Unix și Timpul Unix (MySQL, PHP, JavaScript)

Bună ziua, dragi cititori ai blogului, în acest articol vreau să vă spun despre ce este vorba Ora UnixȘi Marca temporală Unix. Programatorii combină adesea aceste concepte într-unul singur, dar acest lucru nu este în întregime adevărat. În plus, articolul conține multe note utile despre lucrul cu Unix Timestamp în PHP, MySQL și JavaScript.

De ce ora Unix începe la 1 ianuarie 1970

Chestia este că timpul Unix începe să conteze era Unix odată cu lansarea primului sistem UNIX. Primul sistem de acest fel a fost creat în 1969, așa că dezvoltatorii au luat data de 1 ianuarie 1970 la miezul nopții UTC ( UTC).

Să înțelegem pentru ce sunt Unix Time și Unix Timestamp și să le oferim concepte clare.

Marca temporală Unixeste o marca temporală care este o secvență de caractere reprezentând numărul de secunde care au trecut de la 1 ianuarie 1970.

Voi încerca să dau un exemplu pentru a clarifica diferența dintre aceste două concepte.

La momentul scrierii acestei postări, Ora Unix a fost egal 1346765877 .

În timp ce citiți aceste informații, o înregistrare a timpului ( 1346765877 ) este deja o etichetă - Marca temporală Unix! Transformând acest marcaj de timp într-o formă care poate fi citită de om, obținem data 04-09-2012 și ora 17:37:57.

Sincer vorbind, în opinia mea, nu are rost să separăm cele două concepte, dar este totuși util să ne facem o idee despre ce este. Ora Unix, și este de asemenea util să înțelegem că numărul maxim de secunde posibile care au trecut din 1970 are o limită!

Sfârșitul erei Unix va veni în 2038

Fapt: numărul binar maxim în sistemele pe 32 de biți este numărul 01111111 11111111 11111111 11111111 , transformându-l în sistemul zecimal, obținem numărul 2147483647.

19 ianuarie 2038 la 03:14:08 va veni un moment în care numărul de secunde care au trecut de la începutul erei Unix depășește maximul disponibil într-un sistem pe 32 de biți, număr = 2147483647. Dacă bitul depășește, data va fi resetare.

Este foarte ușor să testați această teorie cu un exemplu clar:

  • Deschideți un calculator standard Windows, apăsați ALT+3, aceasta îl va converti în vizualizarea de inginerie;
  • Setați modul de 4 octeți și tipul de intrare zecimal;
  • Scrieți numărul 2147483647;

  • Atenție la reprezentarea numărului în binar;
  • Adăugați unul la număr;

  • Rezultatul adunării va fi un număr negativ!

Dacă continuăm să adăugăm unul, obținem o închidere ciclică.

Este această sunet de dată care va avea loc începând cu 19 ianuarie 2038 pe toate sistemele care utilizează arhitectura pe 32 de biți.

De fapt, nu trebuie să fii trist, deoarece dezvoltatorii de sisteme informatice introduc din ce în ce mai mult arhitecturile pe 64 de biți în utilizare pe scară largă. Să credem că vor reuși până în 2038.

Acum să vorbim despre utilizarea unui marcaj temporal Unix în php, mysql si chiar in javascript.

Lucrul cu marcaj temporal Unix

Un punct foarte important atunci când lucrați cu timestamp Unix în php sau mysql este necesitatea de a înțelege clar avantajele și dezavantajele acestui format de dată.

De exemplu, TIMESTAMP-UL nu poate fi folosit pentru a specifica evenimente istorice sau evenimente din viitorul îndepărtat. Întregul set de date este limitat la perioada 1970 până la începutul anului 2038. Dacă setați o dată dincolo de 2038, aceasta nu va fi interpretată corect de sistemul pe 32 de biți.

Dându-și seama de această limitare, apare o întrebare logică: „ De ce să vă deranjați să reprezentați datele în secunde?"

Când să utilizați marca temporală Unix

Pentru a reprezenta timpul în sistemul nostru obișnuit de măsurare, sunt necesari 8 octeți, iar pentru un marcaj de timp Unix este jumătate din atât - 4 octeți.

Salvarea volumului de date, în opinia mea, este principalul și incontestabil avantaj al utilizării Unix Time.

În plus, există o serie de nuanțe utile disponibile atunci când lucrați cu Marca temporală UNIX în mysql. Și deoarece toate informațiile trebuie stocate pe serverul bazei de date și, la rândul său, are o serie de avantaje atunci când lucrați cu marcaje temporale Unix, alegerea către marcajele temporale Unix poate fi justificată corect prin următoarele prevederi.

MySQL oferă un tip de date Timestamp corespunzător pentru lucrul cu formatul de timp Unix, prin instalarea căruia obținem imediat un avantaj util față de formatele standard DATAȘi DATETIME. Avantajul este că atunci când adăugați o înregistrare nouă la un tabel, coloana cu acel tip de date este populată automat. Aceasta înseamnă că putem economisi nu numai cantitatea de date, ci și timpul CPU al serverului web.

Pentru a salva cuvântul cu acțiune, vom seta următoarea sarcină: atunci când înregistrați un utilizator nou în sistem, trebuie să introduceți data adăugării acestuia în baza de date.

Dacă tipul câmpului care stochează data în tabel este DATETIME, atunci cererea din scriptul PHP va arăta cam așa:

Beneficiile sunt evidente!

Există și un minus: dacă există mai multe câmpuri de tip TIMESTAMP, numai primul este actualizat automat.

Are sens să folosiți INT în loc de marcaj temporal

Mulți programatori, când lucrează cu timestamp Unix, folosesc formatul întreg int(11) . Aceasta este o abordare complet irațională a problemei, deoarece MySQL oferă multe funcții utile pentru tipul de marcaj temporal care afectează viteza de lucru cu acesta. Prin urmare, prin stocarea marcajului de timp în INT, ne vom lipsi de tot suportul de server pentru acest format. Aceasta este aproximativ aceeași cu stocarea id-ului în tipul varchar(11).

Cu toate acestea, există o justificare pentru păstrare marca temporală unix la INT. La transferul unei baze de date între diferite SGBD, poate apărea un conflict de tip, de ex. Pentru unul dintre SGBD, tipul de marcaj temporal poate fi necunoscut. În acest caz, utilizarea int va avea un avantaj, deoarece acest format este disponibil în toate SGBD-urile.

Scurtă descriere a tipurilor de calendare MySQL

TIMESTAMP-UL- tip de date pentru stocarea datei și orei. Datele sunt stocate ca număr de secunde care au trecut de la începutul „erei Unix”. Interval de valori: 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Ocupă 4 octeți.

DATA- tip de date pentru stocarea datelor. Interval de valori: 1000-01-01 - 9999-12-31. Ocupă 3 octeți.

DATETIME- tip de date pentru stocarea datei și orei. Interval de valori: 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Este nevoie de 8 octeți și este stocat ca număr AAAAMMDDDHHMMSS./p>

AN- tip de date pentru stocarea anului. Interval de valori: 1901 - 2155. Ocupă 1 octet.

TIMP- tip de date pentru stocarea timpului. Interval de valori: −828:59:59 - 828:59:59. Ocupă 3 octeți.

Conversie date în Unix

Este timpul să postezi câteva funcții utile pentru conversia datelor în marca temporală Unixși înapoi de la timp unix la o dată care poate fi citită.

Cum să obțineți ora UNIX curentă

  • PHP:

    timp();

  • JavaScript:

    Math.round(new Date().getTime()/1000.0);

  • MySQL:

    SELECT unix_timestamp(acum());