Unix pretvarač vremena. UNIX vrijeme

Šta je Unix vrijeme ili Unix epoha (Unix epoha ili Unix vrijeme ili POSIX vrijeme ili Unix vremenska oznaka)?

UNIX vrijeme ili POSIX vrijeme je metoda vremenskog kodiranja usvojena u UNIX-u i drugim POSIX-kompatibilnim operativnim sistemima.
Početnom tačkom smatra se ponoć (UTC) od 31. decembra 1969. do 1. januara 1970. godine, vrijeme od ovog trenutka naziva se “UNIX era” (engleski Unix Epoch).
UNIX vrijeme je u skladu s UTC-om, posebno, kada su deklarirane UTC prestupne sekunde, odgovarajući brojevi sekundi se ponavljaju.
Metoda pohranjivanja vremena u obliku broja sekundi vrlo je zgodna za korištenje prilikom poređenja datuma (precizno do sekunde), kao i za pohranjivanje datuma: ako je potrebno, mogu se pretvoriti u bilo koji format čitljiv za ljude. Datum i vrijeme u ovom formatu također zauzimaju vrlo malo prostora (4 ili 8 bajtova, ovisno o veličini strojne riječi), pa ga je razumno koristiti za pohranjivanje velikih količina datuma. Nedostaci performansi mogu se pojaviti kada se elementima datuma, kao što su brojevi mjeseci, itd., pristupa vrlo često, ali u većini slučajeva, efikasnije je pohraniti vrijeme kao jednu vrijednost, a ne kao kolekciju polja.

Pretvaranje Unix epohe u čovjeku čitljiv datum


Unix početni i završni datum godine, mjeseca ili dana


Pretvaranje sekundi u dane, sate i minute


Kako ubaciti Unix vrijeme u...

Perlvrijeme
PHPvrijeme()
RubyVrijeme.sada (ili Vrijeme.novo). Za izlaz: Time.now.to_i
Pythonprvo uvezi vrijeme, pa time.time()
Javaduga epoha = System.currentTimeMillis()/1000;
Microsoft .NET C#epoha = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", Sada())
Erlangcalendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(sada()))-719528*24*3600.
MySQLSELECT unix_timestamp(sada())
PostgreSQLSELECT ekstrakt(epoha OD sada());
SQL ServerSELECT DATEDIFF(s, "1970-01-01 00:00:00", GETUTCDATE())
JavaScriptMath.round(new Date().getTime()/1000.0) getTime() vraća vrijeme u milisekundama.
Unix/Linuxdatum +%s
Drugi OSKomandna linija: perl -e "vrijeme ispisa" (ako je Perl instaliran na vašem sistemu)

Pretvaranje datuma u Unix vrijeme u...

PHPmktime( gledati, minuta, sekundi, mjesec, dan, godine)
RubyTime.local( godine, mjesec, dan, gledati, minuta, sekundi, usec) (ili Time.gm za GMT/UTC izlaz). Za izlaz add.to_i
Pythonprvo uvezi vrijeme, zatim int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Javaduga epoha = nova java.text.SimpleDateFormat("dd/MM/gggg HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", polje datuma)
MySQLSELECT unix_timestamp( vrijeme) Format vremena: GGGG-MM-DD HH:MM:SS ili GGMMDD ili GGGGMMDD
PostgreSQLSELECT ekstrakt(epoha FROM datum("2000-01-01 12:34"));
Sa vremenskom oznakom: SELECT EXTRACT(EPOHA IZ VREMENSKE OZNE SA VREMENSKOM ZONOM "2001-02-16 20:38:40-08"); Sa intervalom: ODABIR IZVOD(EPOHA IZ INTERVALA "5 dana 3 sata");
SQL ServerSELECT DATEDIFF(s, "1970-01-01 00:00:00", polje datuma)
Unix/Linuxdatum +%s -d"1. januar 1980. 00:00:01"

Pretvaranje Unix vremena u datume čitljive ljude...

PHPdatum( Format, unix vrijeme);
RubyTime.at( unix vrijeme)
Pythonprvo uvezi vrijeme, zatim time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( unix vrijeme)) Zamijenite time.localtime sa time.gmtime za GMT datum.
JavaString date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date ( unix vrijeme*1000));
VBScript/ASPDodaj datum("s", unix vrijeme, "01/01/1970 00:00:00")
PostgreSQLODABIR VREMENSKI OZNAK SA VREMENSKOM ZONOM "epoha" + unix vrijeme* INTERVAL "1 sekunda";
MySQLfrom_unixtime( unix vrijeme, opciono, izlazni format) Standardni izlazni format GGG-MM-DD HH:MM:SS
SQL ServerDATEADD(s, unix vrijeme, "1970-01-01 00:00:00")
Microsoft Excel=(A1 / 86400) + 25569 Rezultat će biti u GMT vremenskoj zoni. Za ostale vremenske zone: =((A1 +/- vremenska razlika za zonu) / 86400) + 25569.
Linuxdatum -d @1190000000
Drugi OSKomandna linija: perl -e "print skalar(localtime( unix vrijeme))" (Ako je Perl instaliran) Zamijenite "localtime" sa "gmtime" za vremensku zonu GMT/UTC.

Za šta je potreban alat "Unixtime Converter"?

Ovaj alat će prvenstveno biti koristan webmasterima koji se stalno bave velikim količinama datuma ili se često pozivaju na njihove elemente u svom radu. Koristeći alat "Unixtime Converter", možete jednostavno pretvoriti Unix vrijeme u datum koji je prilagođen korisniku (i obrnuto), saznati trenutno vrijeme Unix epohe, a također dobiti Unix vrijeme u različitim programskim jezicima, DBMS-ovima i operativnim sistemima.

Šta je Unix vrijeme?

Unix era (Unix epoch) počela je u noći sa 31. decembra 1969. na 1. januar 1970. godine. Upravo je ovaj datum uzet kao početna tačka „kompjuterskog“ vremena, koje se računa u sekundama i zauzima vrlo malo prostora na disku – samo 4 ili 8 bajtova. Sa ovom metodom kodiranja, programeri mogu "sakriti" bilo koji datum u jedan broj i lako ga pretvoriti u format koji korisnici mogu razumjeti.

Unix vrijeme (koji se naziva i Unix vrijeme ili POSIX vrijeme) je pogodno za korištenje u različitim operativnim sistemima i programskim jezicima, budući da se prikazuje kao jedna vrijednost, a ne kao određeni broj polja koji zauzimaju prostor. Osim toga, UNIX vrijeme je u potpunosti u skladu sa UTC standardom (uključujući i prijestupne godine) - u ovom slučaju se odgovarajuće druge vrijednosti jednostavno ponavljaju.

Unix terminologija

Nekoliko riječi o terminima.

dakle, Unix vrijeme(ili POSIX vrijeme) je broj sekundi koji su prošli od ponoći 1. januara 1970. do danas.

Unix vremenska oznaka(vremenski žig) je "fiksno" vrijeme, drugim riječima, određeni datum utisnut u broj.

UTC(Univerzalno koordinirano vrijeme) je univerzalno koordinirano vrijeme, koje je "fiksirano" na početnom meridijanu i od kojeg se računaju geografske vremenske zone.

Koliko je „izdržljiv“ ovaj sistem?

Za samo nekoliko decenija, odnosno 19. januara 2038. u 03:14:08 UTC, Unix vrijeme će dostići vrijednost 2147483648, a kompjuterski sistemi mogu protumačiti ovaj broj kao negativan. Ključ za rješavanje ovog problema je korištenje 64-bitne (umjesto 32-bitne) varijable za pohranjivanje vremena. U ovom slučaju, opskrba numeričkim vrijednostima Unix vremena trajat će čovječanstvu još 292 milijarde godina. Nije loše, zar ne?

Unix vrijeme je isto za sve

Ako živite u Londonu ili San Francisku, a vaši prijatelji žive u Moskvi, onda možete "provjeriti satove" koristeći Unix vrijeme: ovaj sistem je trenutno isti za cijeli svijet. Naravno, ako je vrijeme na serverima ispravno podešeno. I to uz pomoć alata "Unixtime converter" Ova konverzija će vam oduzeti djelić sekunde.

Ovaj alat je potreban za pretvaranje datuma iz Unix TimeStamp formata u datum čitljiv ljudima i obrnuto.

Šta je Unix vrijeme i za šta se koristi? Da bih razumeo zašto se ovo koristi, počeću sa opštim konceptom šta je Unix vreme.

Unix vrijeme (ili TimeStamp, što u prijevodu na ruski znači "vremenski žig" i ima isto značenje) je broj sekundi koji je prošao od 1. januara 1970. To jest, Unix TimeStamp u vrijeme 01/01/1970 00:00:00 bio je jednak 0. Nakon 2 minute (120 sekundi), Unix vrijeme je već bilo jednako 120. Na primjer, dan kasnije (01 /02/1970 00:00:00) Unix vrijeme je već bilo jednako 86400, pošto je prošlo 60*60*24=86400 sekundi. Sada je Unix vremenska oznaka već 1561815370 i broj stalno raste, pošto sekunde neprestano otkucavaju.

Ali zašto ga koristiti? Stvar je u tome što je Unix TimeStamp pogodan za korištenje za pohranjivanje i manipulaciju datumima prilikom programiranja. Neću ulaziti u detalje, ali ukratko, broj je mnogo pogodniji za brojanje i upoređivanje od niza sa "lijevim" znakovima. Zbog toga većina programera koristi Unix TimeStamp za rad sa datumima u svojim projektima, a u bazi podataka često vidimo jedan vrlo veliki broj u polju `datum`, koji uopće ne izgleda kao datum.

Ovdje ovaj alat dobro dolazi. Pomoću njega možete lako prevesti taj "veliki broj iz baze podataka" u datum čitljiv za ljude. Osim toga, možete čak učiniti suprotno i pretvoriti bilo koji datum u Unix TimeStamp. Ovo su mogućnosti kojima je ovaj pretvarač obdaren.

Problem 2038

Kao što sam već rekao, broj Unix TimeStamp sa svakom sekundom se povećava za 1. Prije ili kasnije granica ovog broja mora doći i to će biti 2038. godine. Stvar je u tome da je maksimalni broj 32-bitnih operativnih sistema uobičajenih na početku 21. veka 2 31. Ovo je broj koji će Unix TimeStamp dostići 2038. godine.

→ Rješenje za ovaj problem je već pronađeno. Kako bi osigurali da sajtovi ne prestanu ispravno da bilježe vrijeme 2038. godine, dovoljno je koristiti 64-bitni operativni sistem na hosting/VDS/namjenskom serveru, a ne 32-bitni. Uz brzo rastuću snagu računara i smanjenje njihove cijene, sve ide ka tome da će do 2038. godine velika većina usluga u oblasti obezbjeđivanja prostora za web stranicu biti pružena na bazi 64-bitnog OS-a. Inače, u 64-bitnom sistemu takav problem nas neće pogađati najmanje 292 milijarde godina, što je sasvim dovoljno za razmatranje problem 2038 riješeno.

Jer Nema ugrađenih alata u dizel gorivo, kreirajte sljedeću skriptu: #!/bin/sh truss date 2>&1 |grep ^time |awk "(print $3;)" exit $? ili nawk "BEGIN(print srand())" ili u Perlu: perl -e "vrijeme ispisa, "\n";" saznajte datum izmjene datoteke: truss -v lstat -t lstat ls -l file.txt 2>&1 1>/dev/null | grep "mt\ =\ " | awk "(print $9;)"

Kako ubaciti Unix vrijeme u...

Perl vrijeme
PHP vrijeme()
Ruby Vrijeme.sada (ili Vrijeme.novo). Za izlaz: Time.now.to_i
Python prvo uvezi vrijeme, pa time.time()
Java duga epoha = System.currentTimeMillis()/1000;
Microsoft .NET C# epoha = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASP DateDiff("s", "01/01/1970 00:00:00", Sada())
Erlang calendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(sada()))-719528*24*3600.
MySQL SELECT unix_timestamp(sada())
PostgreSQL SELECT ekstrakt(epoha OD sada());
SQL Server SELECT DATEDIFF(s, "1970-01-01 00:00:00", GETUTCDATE())
JavaScript Math.round(new Date().getTime()/1000.0) getTime() vraća vrijeme u milisekundama.
Unix/Linux datum +%s
Drugi OS Komandna linija: perl -e "vrijeme ispisa" (ako je Perl instaliran na vašem sistemu)

Pretvaranje datuma u Unix vrijeme u...
PHP mktime( gledati, minuta, sekundi, mjesec, dan, godine)
Ruby Time.local( godine, mjesec, dan, gledati, minuta, sekundi, usec) (ili Time.gm za GMT/UTC izlaz). Za izlaz add.to_i
Python prvo uvezi vrijeme, zatim int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Java duga epoha = nova java.text.SimpleDateFormat("dd/MM/gggg HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASP DateDiff("s", "01/01/1970 00:00:00", polje datuma)
MySQL SELECT unix_timestamp( vrijeme) Format vremena: GGGG-MM-DD HH:MM:SS ili GGMMDD ili GGGGMMDD
PostgreSQL SELECT ekstrakt(epoha FROM datum("2000-01-01 12:34"));
Sa vremenskom oznakom: SELECT EXTRACT(EPOHA IZ VREMENSKE OZNE SA VREMENSKOM ZONOM "2001-02-16 20:38:40-08"); Sa intervalom: ODABIR IZVOD(EPOHA IZ INTERVALA "5 dana 3 sata");
SQL Server SELECT DATEDIFF(s, "1970-01-01 00:00:00", polje datuma)
Unix/Linux datum +%s -d"1. januar 1980. 00:00:01"

Pretvaranje Unix vremena u datume čitljive ljude...
PHP datum( Format, unix vrijeme);
Ruby Time.at( unix vrijeme)
Python prvo uvezi vrijeme, zatim time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( unix vrijeme)) Zamijenite time.localtime sa time.gmtime za GMT datum.
Java String date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date ( unix vrijeme*1000));
VBScript/ASP Dodaj datum("s", unix vrijeme, "01/01/1970 00:00:00")
PostgreSQL ODABIR VREMENSKI OZNAK SA VREMENSKOM ZONOM "epoha" + unix vrijeme* INTERVAL "1 sekunda";
MySQL from_unixtime( unix vrijeme, opciono, izlazni format) Standardni izlazni format GGG-MM-DD HH:MM:SS
SQL Server DATEADD(s, unix vrijeme, "1970-01-01 00:00:00")
Microsoft Excel =(A1 / 86400) + 25569 Rezultat će biti u GMT vremenskoj zoni. Za ostale vremenske zone: =((A1 +/- vremenska razlika za zonu) / 86400) + 25569.
Linux datum -d @1190000000
Drugi OS Komandna linija: perl -e "print skalar(localtime( unix vrijeme))" (Ako je Perl instaliran) Zamijenite "localtime" sa "gmtime" za vremensku zonu GMT/UTC.

Šta je Unix vrijeme ili Unix epoha (Unix epoha ili Unix vrijeme ili POSIX vrijeme ili Unix vremenska oznaka)?

UNIX vrijeme ili POSIX vrijeme je metoda vremenskog kodiranja usvojena u UNIX-u i drugim POSIX-kompatibilnim operativnim sistemima.
Početnom tačkom smatra se ponoć (UTC) od 31. decembra 1969. do 1. januara 1970. godine, vrijeme od ovog trenutka naziva se “UNIX era” (engleski Unix Epoch).
UNIX vrijeme je u skladu s UTC-om, posebno, kada su deklarirane UTC prestupne sekunde, odgovarajući brojevi sekundi se ponavljaju.
Metoda pohranjivanja vremena u obliku broja sekundi vrlo je zgodna za korištenje prilikom poređenja datuma (precizno do sekunde), kao i za pohranjivanje datuma: ako je potrebno, mogu se pretvoriti u bilo koji format čitljiv za ljude. Datum i vrijeme u ovom formatu također zauzimaju vrlo malo prostora (4 ili 8 bajtova, ovisno o veličini strojne riječi), pa ga je razumno koristiti za pohranjivanje velikih količina datuma. Nedostaci performansi mogu se pojaviti kada se elementima datuma, kao što su brojevi mjeseci, itd., pristupa vrlo često, ali u većini slučajeva, efikasnije je pohraniti vrijeme kao jednu vrijednost, a ne kao kolekciju polja.

Pretvaranje Unix epohe u čovjeku čitljiv datum


Unix početni i završni datum godine, mjeseca ili dana


Pretvaranje sekundi u dane, sate i minute


Kako ubaciti Unix vrijeme u...

Perlvrijeme
PHPvrijeme()
RubyVrijeme.sada (ili Vrijeme.novo). Za izlaz: Time.now.to_i
Pythonprvo uvezi vrijeme, pa time.time()
Javaduga epoha = System.currentTimeMillis()/1000;
Microsoft .NET C#epoha = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", Sada())
Erlangcalendar:datetime_to_gregorian_seconds(calendar:now_to_universal_time(sada()))-719528*24*3600.
MySQLSELECT unix_timestamp(sada())
PostgreSQLSELECT ekstrakt(epoha OD sada());
SQL ServerSELECT DATEDIFF(s, "1970-01-01 00:00:00", GETUTCDATE())
JavaScriptMath.round(new Date().getTime()/1000.0) getTime() vraća vrijeme u milisekundama.
Unix/Linuxdatum +%s
Drugi OSKomandna linija: perl -e "vrijeme ispisa" (ako je Perl instaliran na vašem sistemu)

Pretvaranje datuma u Unix vrijeme u...

PHPmktime( gledati, minuta, sekundi, mjesec, dan, godine)
RubyTime.local( godine, mjesec, dan, gledati, minuta, sekundi, usec) (ili Time.gm za GMT/UTC izlaz). Za izlaz add.to_i
Pythonprvo uvezi vrijeme, zatim int(time.mktime(time.strptime("2000-01-01 12:34:00", "%Y-%m-%d %H:%M:%S")))
Javaduga epoha = nova java.text.SimpleDateFormat("dd/MM/gggg HH:mm:ss").parse("01/01/1970 01:00:00");
VBScript/ASPDateDiff("s", "01/01/1970 00:00:00", polje datuma)
MySQLSELECT unix_timestamp( vrijeme) Format vremena: GGGG-MM-DD HH:MM:SS ili GGMMDD ili GGGGMMDD
PostgreSQLSELECT ekstrakt(epoha FROM datum("2000-01-01 12:34"));
Sa vremenskom oznakom: SELECT EXTRACT(EPOHA IZ VREMENSKE OZNE SA VREMENSKOM ZONOM "2001-02-16 20:38:40-08"); Sa intervalom: ODABIR IZVOD(EPOHA IZ INTERVALA "5 dana 3 sata");
SQL ServerSELECT DATEDIFF(s, "1970-01-01 00:00:00", polje datuma)
Unix/Linuxdatum +%s -d"1. januar 1980. 00:00:01"

Pretvaranje Unix vremena u datume čitljive ljude...

PHPdatum( Format, unix vrijeme);
RubyTime.at( unix vrijeme)
Pythonprvo uvezi vrijeme, zatim time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime( unix vrijeme)) Zamijenite time.localtime sa time.gmtime za GMT datum.
JavaString date = new java.text.SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new java.util.Date ( unix vrijeme*1000));
VBScript/ASPDodaj datum("s", unix vrijeme, "01/01/1970 00:00:00")
PostgreSQLODABIR VREMENSKI OZNAK SA VREMENSKOM ZONOM "epoha" + unix vrijeme* INTERVAL "1 sekunda";
MySQLfrom_unixtime( unix vrijeme, opciono, izlazni format) Standardni izlazni format GGG-MM-DD HH:MM:SS
SQL ServerDATEADD(s, unix vrijeme, "1970-01-01 00:00:00")
Microsoft Excel=(A1 / 86400) + 25569 Rezultat će biti u GMT vremenskoj zoni. Za ostale vremenske zone: =((A1 +/- vremenska razlika za zonu) / 86400) + 25569.
Linuxdatum -d @1190000000
Drugi OSKomandna linija: perl -e "print skalar(localtime( unix vrijeme))" (Ako je Perl instaliran) Zamijenite "localtime" sa "gmtime" za vremensku zonu GMT/UTC.

Za šta je potreban alat "Unixtime Converter"?

Ovaj alat će prvenstveno biti koristan webmasterima koji se stalno bave velikim količinama datuma ili se često pozivaju na njihove elemente u svom radu. Koristeći alat "Unixtime Converter", možete jednostavno pretvoriti Unix vrijeme u datum koji je prilagođen korisniku (i obrnuto), saznati trenutno vrijeme Unix epohe, a također dobiti Unix vrijeme u različitim programskim jezicima, DBMS-ovima i operativnim sistemima.

Šta je Unix vrijeme?

Unix era (Unix epoch) počela je u noći sa 31. decembra 1969. na 1. januar 1970. godine. Upravo je ovaj datum uzet kao početna tačka „kompjuterskog“ vremena, koje se računa u sekundama i zauzima vrlo malo prostora na disku – samo 4 ili 8 bajtova. Sa ovom metodom kodiranja, programeri mogu "sakriti" bilo koji datum u jedan broj i lako ga pretvoriti u format koji korisnici mogu razumjeti.

Unix vrijeme (koji se naziva i Unix vrijeme ili POSIX vrijeme) je pogodno za korištenje u različitim operativnim sistemima i programskim jezicima, budući da se prikazuje kao jedna vrijednost, a ne kao određeni broj polja koji zauzimaju prostor. Osim toga, UNIX vrijeme je u potpunosti u skladu sa UTC standardom (uključujući i prijestupne godine) - u ovom slučaju se odgovarajuće druge vrijednosti jednostavno ponavljaju.

Unix terminologija

Nekoliko riječi o terminima.

dakle, Unix vrijeme(ili POSIX vrijeme) je broj sekundi koji su prošli od ponoći 1. januara 1970. do danas.

Unix vremenska oznaka(vremenski žig) je "fiksno" vrijeme, drugim riječima, određeni datum utisnut u broj.

UTC(Univerzalno koordinirano vrijeme) je univerzalno koordinirano vrijeme, koje je "fiksirano" na početnom meridijanu i od kojeg se računaju geografske vremenske zone.

Koliko je „izdržljiv“ ovaj sistem?

Za samo nekoliko decenija, odnosno 19. januara 2038. u 03:14:08 UTC, Unix vrijeme će dostići vrijednost 2147483648, a kompjuterski sistemi mogu protumačiti ovaj broj kao negativan. Ključ za rješavanje ovog problema je korištenje 64-bitne (umjesto 32-bitne) varijable za pohranjivanje vremena. U ovom slučaju, opskrba numeričkim vrijednostima Unix vremena trajat će čovječanstvu još 292 milijarde godina. Nije loše, zar ne?

Unix vrijeme je isto za sve

Ako živite u Londonu ili San Francisku, a vaši prijatelji žive u Moskvi, onda možete "provjeriti satove" koristeći Unix vrijeme: ovaj sistem je trenutno isti za cijeli svijet. Naravno, ako je vrijeme na serverima ispravno podešeno. I to uz pomoć alata "Unixtime converter" Ova konverzija će vam oduzeti djelić sekunde.

Samo za čitatelje Lifeexample moguće je otvoriti online prodavnicu na Moguta.CMS sa 15% popusta

Unix vrijeme i Unix vremenska oznaka (MySQL, PHP, JavaScript)

Zdravo, dragi čitatelji bloga, u ovom članku želim vam reći o čemu Unix vrijeme I Unix vremenska oznaka. Programeri često kombinuju ove koncepte u jedan, ali to nije sasvim tačno. Osim toga, članak sadrži mnoge korisne napomene o radu sa Unix Timestamp-om u PHP-u, MySQL-u i JavaScript-u.

Zašto Unix vrijeme počinje 1. januara 1970

Stvar je u tome da Unix vrijeme počinje da računa Unix eru sa izdavanjem prvog UNIX sistema. Prvi sistem ove vrste stvoren je 1969. godine, pa su programeri uzeli datum 1. januara 1970. u ponoć UTC ( UTC).

Hajde da shvatimo čemu služe Unix Time i Unix Timestamp i damo im jasne koncepte.

Unix vremenska oznakaje vremenska oznaka koja je niz znakova koji predstavlja broj sekundi koji su prošli od 1. januara 1970. godine.

Pokušat ću dati primjer da razjasnim razliku između ova dva koncepta.

U vrijeme pisanja ovog posta, Unix vrijeme bio jednak 1346765877 .

Dok čitate ove informacije, zapis vremena ( 1346765877 ) je već oznaka - Unix vremenska oznaka! Konvertujući ovu vremensku oznaku u oblik čitljiv za ljude, dobijamo datum 04-09-2012 i vreme 17:37:57.

Iskreno govoreći, po mom mišljenju, nema posebne svrhe u razdvajanju dva koncepta, ali je ipak korisno imati ideju o tome što je to Unix Time, a također je korisno shvatiti da broj maksimalno mogućih sekundi koji su prošli od 1970. godine ima ograničenje!

Kraj Unix ere će doći 2038

Činjenica: maksimalni binarni broj u 32-bitnim sistemima je broj 01111111 11111111 11111111 11111111 , pretvarajući ga u decimalni sistem, dobijamo broj 2147483647.

19. januara 2038 u 03:14:08 doći će trenutak kada broj sekundi koji su prošli od početka Unix ere premaši maksimum koji je dostupan u 32-bitnom sistemu, broj = 2147483647. Ako se bit prelije, datum će biti resetovati.

Ovu teoriju je vrlo lako testirati jasnim primjerom:

  • Otvorite standardni Windows kalkulator, pritisnite ALT+3, ovo će ga pretvoriti u inženjerski prikaz;
  • Postavite 4 bajt mod i tip decimalnog unosa;
  • Upišite broj 2147483647;

  • Obratite pažnju na predstavljanje broja u binarnom obliku;
  • Dodajte jedan broju;

  • Rezultat zbrajanja će biti negativan broj!

Ako nastavimo sa dodavanjem jednog, dobićemo ciklično zatvaranje.

To je zvonjenje datuma koje će se pojaviti od 19. januara 2038. na svim sistemima koji koriste 32-bitnu arhitekturu.

Zapravo, nema potrebe da budete tužni, jer programeri računarskih sistema sve više uvode 64-bitne arhitekture u široku upotrebu. Vjerujmo da će to uspjeti do 2038. godine.

Sada razgovarajmo o korištenju unix vremenske oznake php, mysql pa čak i u javascript.

Rad sa unix vremenskom oznakom

Veoma važna tačka pri radu sa unix vremenskom oznakom u php ili mysql je potreba da se jasno razumeju prednosti i nedostaci ovog formata datuma.

Na primjer, TIMESTAMP ne može se koristiti za specificiranje istorijskih događaja ili događaja iz daleke budućnosti. Cijeli set datuma ograničen je na period od 1970. do početka 2038. godine. Ako postavite datum nakon 2038. godine, 32-bitni sistem ga neće ispravno protumačiti.

Shvativši ovo ograničenje, postavlja se logično pitanje: " Zašto se truditi predstavljati datume u sekundama?"

Kada koristiti Unix vremensku oznaku

Za predstavljanje vremena u našem uobičajenom sistemu mjerenja potrebno je 8 bajtova, a za unix vremensku oznaku to je upola manje - 4 bajta.

Ušteda količine podataka, po mom mišljenju, je glavna i neosporna prednost korištenja Unix Time-a.

Osim toga, postoji niz korisnih nijansi dostupnih prilikom rada s njima UNIX vremenska oznaka u mysql. A pošto sve informacije moraju biti pohranjene na serveru baze podataka, a on zauzvrat ima niz prednosti pri radu sa Unix vremenskim oznakama, izbor prema unix vremenskoj oznaci može se ispravno opravdati sljedećim odredbama.

MySQL pruža odgovarajući tip podataka Timestamp za rad sa Unix formatom vremena, instalacijom kojeg odmah dobijamo korisnu prednost u odnosu na standardne formate DATUM I DATETIME. Prednost je što kada dodate novi zapis u tabelu, kolona sa tim tipom podataka se automatski popunjava. To znači da možemo uštedjeti ne samo na količini podataka, već i na CPU vremenu web servera.

Za sigurnosnu kopiju riječi radnjom, postavićemo sljedeći zadatak: prilikom registracije novog korisnika u sustavu potrebno je unijeti datum njegovog dodavanja u bazu podataka.

Ako je tip polja u kojem se pohranjuje datum u tabeli DATETIME, tada će zahtjev iz PHP skripte izgledati otprilike ovako:

Prednosti su očigledne!

Postoji i minus: ako postoji više polja tipa TIMESTAMP, samo prvo se automatski ažurira.

Ima li smisla koristiti INT umjesto vremenske oznake

Mnogi programeri, kada rade sa unix vremenskom oznakom, koriste celobrojni format int(11) . Ovo je potpuno iracionalan pristup problemu, budući da MySQL pruža mnoge korisne funkcije za tip vremenske oznake koje utiču na brzinu rada s njim. Stoga, pohranjivanjem vremenske oznake u INT, mi ćemo se lišiti svake serverske podrške za ovaj format. Ovo je otprilike isto kao pohranjivanje id-a u tipu varchar(11).

Međutim, postoji jedno opravdanje za zadržavanje unix vremenska oznaka za INT. Prilikom prijenosa baze podataka između različitih DBMS-a može doći do sukoba tipova, tj. Za jedan od DBMS-ova, tip vremenske oznake može biti nepoznat. U ovom slučaju, korištenje int će imati prednost, jer je ovaj format dostupan u svim DBMS-ovima.

Kratak opis tipova MySQL kalendara

TIMESTAMP- tip podataka za pohranjivanje datuma i vremena. Podaci se pohranjuju kao broj sekundi koji su prošli od početka “Unix ere”. Raspon vrijednosti: 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Zauzima 4 bajta.

DATUM- tip podataka za pohranjivanje datuma. Raspon vrijednosti: 1000-01-01 - 9999-12-31. Zauzima 3 bajta.

DATETIME- tip podataka za pohranjivanje datuma i vremena. Raspon vrijednosti: 1000-01-01 00:00:00 - 9999-12-31 00:00:00. Zauzima 8 bajtova i pohranjuje se kao broj YYYYMMDDHHMMSS./p>

GODINA- tip podataka za pohranjivanje godine. Raspon vrijednosti: 1901 - 2155. Zauzima 1 bajt.

VRIJEME- tip podataka za pohranjivanje vremena. Raspon vrijednosti: −828:59:59 - 828:59:59. Zauzima 3 bajta.

Konverzija datuma u Unixu

Vrijeme je da objavite neke korisne funkcije za pretvaranje datuma u unix vremenska oznaka i nazad iz unix-vrijeme na čitljiv datum.

Kako dobiti trenutno UNIX vrijeme

  • PHP:

    vrijeme();

  • JavaScript:

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

  • MySQL:

    SELECT unix_timestamp(now() ) ;

mob_info