Računala Windows Internet

Unix pretvarač. Trenutno vrijeme Unix epohe. Kako unijeti Unix vrijeme

  • UTC: Vrijeme na početnom meridijanu naziva se univerzalno koordinirano vrijeme. Nepodudaranje akronima uzrokovano je potrebom za njegovom univerzalnošću za sve jezike.
  • GMT: Prije se koristilo srednje vrijeme po Greenwichu (GMT) umjesto UTC, budući da je primarni meridijan odabran da prolazi kroz Kraljevski opservatorij u Greenwichu.
  • Ostale vremenske zone mogu se napisati kao pomak od UTC. Na primjer, australsko istočno standardno vrijeme (EST) zapisuje se kao UTC + 1000, što znači da je 10:00 UTC 20:00 EST istog dana.
  • Ljetno vrijeme ne utječe na UTC. Ovo je samo politička odluka o promjeni vremenske zone (odmak od UTC). Na primjer, GMT se još uvijek koristi: zimi je britansko nacionalno vrijeme. Ljeti postaje BST.
  • Skočne sekunde: Prema međunarodnoj konvenciji, UTC se ne drži više od 0,9 sekundi od fizičke stvarnosti (UT1, koje se mjeri u solarnom vremenu) uvođenjem "prestupne sekunde" na kraju posljednje minute godine u UTC-u ili posljednje minute Lipanj.
  • Prijestupne sekunde ne moraju biti najavljene (od strane astronoma) više od 6 mjeseci prije njihovog uvođenja. To je problem ako trebate bilo kakvo planiranje s preciznošću od jedne sekunde za više od 6 mjeseci.
  • Unix vrijeme: Mjereno brojem sekundi od "epohe" (početak 1970. UTC). Vremenske zone ili ljetno računanje vremena ne utječu na Unix vrijeme.
  • Prema POSIX.1 standardu, Unix vrijeme bi trebalo upravljati prijestupnim sekundama ponavljanjem prethodne sekunde, na primjer: 59.00 59.25 59.50 59.75 59.00 ← ponoviti 59.25 59.50 59.75 00.00 ← 2 inkrement je 00 sekunde. u vašem satu sustava i vaše vrijeme zajamčeno ide unatrag. S druge strane, svaki dan je točno 86 400 sekundi, i nije vam potrebna tablica svih prošlih i budućih prijestupnih sekundi da pretvorite Unix vrijeme u satima-minutama-sekundama čitljivim ljudima.
  • Pretpostavlja se da će ntpd ponovno pokušati nakon što primi preskočne bitove od uzvodnih vremenskih poslužitelja, ali sam također vidio da ne radi ništa: sustav ide jednu sekundu u budućnost, a zatim se polako vraća na točno vrijeme.

Što bi svaki programer trebao znati o vremenu

  • Vremenske zone odnose se na razinu prezentacije
    Većina vašeg koda ne bi se trebala baviti vremenskim zonama ili lokalnim vremenom, trebao bi proći Unix vrijeme kakvo jest.
  • Kada mjerite vrijeme, mjerite Unix vrijeme. Ovo je UTC. Lako ga je dobiti (po funkcijama sustava). Nema vremenske zone ili ljetno računanje vremena (i prijestupne sekunde).
  • Kada pohranjujete vrijeme, pohranite Unix vrijeme. Ovo je jedan broj.
  • Ako želite zadržati ljudsko čitljivo vrijeme (na primjer, u zapisnicima), pokušajte ga zadržati zajedno s Unix vremenom, ne umjesto.
  • Kada prikazujete vrijeme, uvijek uključite pomak vremenske zone. Format vremena bez pomaka je beskoristan.
  • Sistemski sat nije točan.
  • Jeste li online? Sistemski sat svakog drugog stroja nije točan na drugačiji način.
  • Sat sustava može, i hoće, skakati naprijed-natrag u vremenu zbog stvari koje su izvan vaše kontrole. Vaš program mora biti dizajniran da preživi ovo.
  • Omjer broja sekundi sistemski sat na količinu stvaran sekunde nisu točne i mogu varirati. Uglavnom ovisi o temperaturi.
  • Nemojte slijepo koristiti gettimeofday (). Ako želite monoton (sve veći) sat, pogledajte clock_gettime (). [Java opcija: koristite System.nanoTime () umjesto System.currentTimeMillis ()]
  • ntpd može promijeniti vrijeme sustava na dva načina:
    • Korak: sat odmah skače naprijed ili natrag na točno vrijeme
    • Pokretanje: Mijenja frekvenciju sata sustava tako da se polako pomiče prema točnom vremenu.
    Uvijanje je poželjno jer je manje štetno, ali korisno samo za ispravljanje malih razlika.

Posebni slučajevi

  • Vrijeme prolazi brzinom od jedne sekunde u sekundi za sve promatrače. Učestalost udaljenih satova u odnosu na promatrača ovisi o brzini i gravitaciji. Satovi unutar GPS satelita prilagođeni su kako bi se prevladali učinci relativnosti.
  • MySQL pohranjuje stupce DATETIME kao vrijednosti upakirane u brojeve "GGGGMMDD HHMMSS" Ako ste zabrinuti za pohranjivanje vremenskih oznaka, pohranite ih kao cijeli broj i koristite funkcije UNIX_TIMESTAMP () i FROM_UNIXTIME () za pretvaranje.

Jer nema ugrađenih alata u dizelskom gorivu, stvaramo sljedeću skriptu: #! / bin / sh truss date 2> & 1 | grep ^ time | awk "(ispis $ 3;)" exit $? ili nawk "BEGIN (ispis srand ())" ili na perl: 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 "(ispis 9 dolara;)"

Kako dobiti Unix vrijeme u...

Perl vrijeme
PHP vrijeme ()
Rubin Vrijeme.sada (ili Vrijeme.novo). Za izlaz: Vrijeme.sada.do_i
Piton prvo uvezi vrijeme, a zatim 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 kalendar: datetime_to_gregorian_seconds (kalendar: sada_to_univerzalno_vrijeme (sada ())) - 719528 * 24 * 3600.
MySQL SELECT unix_timestamp (sada ())
PostgreSQL SELECT ekstrakt (epoha OD sada ());
SQL Server ODABIR DATEDIFF (s, "1970-01-01 00:00:00", GETUTCDATE ())
JavaScript Math.round (novi datum (). GetTime () / 1000.0) getTime () vraća vrijeme u milisekundama.
Unix / Linux datum +% s
Drugi OS Naredbeni redak: perl -e "vrijeme ispisa" (ako je Perl instaliran na vašem sustavu)

Pretvaranje datuma u Unix vrijeme u...
PHP mktime ( Gledati, minutama, sekundi, mjesec, dan, godina)
Rubin Time.local ( godina, mjesec, dan, Gledati, minutama, sekundi, usec) (ili Time.gm za GMT/UTC izlaz). Za prikaz dodajte .to_i
Piton prvo import time, a zatim int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Java duga epoha = novi 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 ODABIR unix_timestamp ( vrijeme) Format vremena: GGGG-MM-DD HH: MM: SS ili GGMMDD ili GGGMMDD
PostgreSQL SELECT ekstrakt (epoha OD datuma ("2000-01-01 12:34"));
S vremenskom oznakom: ODABIR IZVLAKA (EPOHA IZ VREMENSKE OZNE S VREMENSKOM ZONOM "2001-02-16 20: 38: 40-08"); S intervalom: ODABIR IZVOD (EPOHA IZ INTERVALA "5 dana 3 sata");
SQL Server ODABIR DATEDIFF (s, "1970-01-01 00:00:00", polje datuma)
Unix / Linux datum +% s -d "1. siječnja 1980. 00:00:01"

Pretvaranje Unix vremena u čovjeku čitljiv datum...
PHP datum ( Format, unix vrijeme);
Rubin Time.at ( unix vrijeme)
Piton prvo uvezite vrijeme, zatim time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( unix vrijeme)) Zamijenite time.localtime s time.gmtime za GMT datum.
Java Niz datum = novi java.text.SimpleDateFormat ("dd / MM / gggg HH: mm: ss"). Format (novi java.util.Date ( unix vrijeme*1000));
VBScript / ASP Dodaj datum ("s", unix vrijeme, "01/01/1970 00:00:00")
PostgreSQL ODABIR VREMENSKI OZNAK S VREMENSKOM ZONOM "epoha" + unix vrijeme* INTERVAL "1 sekunda";
MySQL from_unixtime ( unix vrijeme, izborni, 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 Naredbeni redak: perl -e "print skalar (lokalno vrijeme ( unix vrijeme)) "(Ako je Perl instaliran) Zamijenite" lokalno vrijeme "s" gmtime "za GMT / UTC vremensku zonu.

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

UNIX-vrijeme ili POSIX-vrijeme (engleski Unix time) - način kodiranja vremena, prihvaćen u UNIX-u i drugim POSIX-kompatibilnim operativnim sustavima.
Početkom odbrojavanja smatra se ponoć (UTC) od 31. prosinca 1969. do 1. siječnja 1970., vrijeme od tog trenutka naziva se "UNIX era" (engleski Unix Epoch).
UNIX vrijeme je u skladu s UTC-om, posebice, kada su prijestupne sekunde deklarirane UTC, odgovarajući brojevi sekundi se ponavljaju.
Metoda pohranjivanja vremena u obliku broja sekundi vrlo je prikladna za korištenje prilikom usporedbe datuma (točno do sekunde), kao i za pohranjivanje datuma: ako je potrebno, mogu se pretvoriti u bilo koji čitljiv format. 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 u izvedbi mogu se pojaviti ako vrlo često pristupate elementima datuma, kao što je broj mjeseca itd. Ali u većini slučajeva učinkovitije je pohraniti vrijeme kao jednu vrijednost, a ne kao skup polja.

Pretvaranje Unix ere u datum čitljiv za ljude


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


Pretvaranje sekundi u dane, sate i minute


Kako dobiti Unix vrijeme u...

Perlvrijeme
PHPvrijeme ()
RubinVrijeme.sada (ili Vrijeme.novo). Za izlaz: Vrijeme.sada.do_i
Pitonprvo uvezi vrijeme, a zatim 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 ())
Erlangkalendar: datetime_to_gregorian_seconds (kalendar: sada_to_univerzalno_vrijeme (sada ())) - 719528 * 24 * 3600.
MySQLSELECT unix_timestamp (sada ())
PostgreSQLSELECT ekstrakt (epoha OD sada ());
SQL ServerODABIR DATEDIFF (s, "1970-01-01 00:00:00", GETUTCDATE ())
JavaScriptMath.round (novi datum (). GetTime () / 1000.0) getTime () vraća vrijeme u milisekundama.
Unix / Linuxdatum +% s
Drugi OSNaredbeni redak: perl -e "vrijeme ispisa" (ako je Perl instaliran na vašem sustavu)

Pretvaranje datuma u Unix vrijeme u...

PHPmktime ( Gledati, minutama, sekundi, mjesec, dan, godina)
RubinTime.local ( godina, mjesec, dan, Gledati, minutama, sekundi, usec) (ili Time.gm za GMT/UTC izlaz). Za prikaz dodajte .to_i
Pitonprvo import time, a zatim int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Javaduga epoha = novi 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)
MySQLODABIR unix_timestamp ( vrijeme) Format vremena: GGGG-MM-DD HH: MM: SS ili GGMMDD ili GGGMMDD
PostgreSQLSELECT ekstrakt (epoha OD datuma ("2000-01-01 12:34"));
S vremenskom oznakom: ODABIR IZVLAKA (EPOHA IZ VREMENSKE OZNE S VREMENSKOM ZONOM "2001-02-16 20: 38: 40-08"); S intervalom: ODABIR IZVOD (EPOHA IZ INTERVALA "5 dana 3 sata");
SQL ServerODABIR DATEDIFF (s, "1970-01-01 00:00:00", polje datuma)
Unix / Linuxdatum +% s -d "1. siječnja 1980. 00:00:01"

Pretvaranje Unix vremena u čovjeku čitljiv datum...

PHPdatum ( Format, unix vrijeme);
RubinTime.at ( unix vrijeme)
Pitonprvo uvezite vrijeme, zatim time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( unix vrijeme)) Zamijenite time.localtime s time.gmtime za GMT datum.
JavaNiz datum = novi java.text.SimpleDateFormat ("dd / MM / gggg HH: mm: ss"). Format (novi java.util.Date ( unix vrijeme*1000));
VBScript / ASPDodaj datum ("s", unix vrijeme, "01/01/1970 00:00:00")
PostgreSQLODABIR VREMENSKI OZNAK S VREMENSKOM ZONOM "epoha" + unix vrijeme* INTERVAL "1 sekunda";
MySQLfrom_unixtime ( unix vrijeme, izborni, 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 OSNaredbeni redak: perl -e "print skalar (lokalno vrijeme ( unix vrijeme)) "(Ako je Perl instaliran) Zamijenite" lokalno vrijeme "s" gmtime "za GMT / UTC vremensku zonu.

Čemu služi alat "Unixtime Converter"?

Ovaj će alat prije svega biti koristan webmasterima koji se stalno bave velikim količinama datuma ili se često pozivaju na njihove elemente u svom radu. Pomoću alata "Unixtime Converter" možete jednostavno pretvoriti Unix vrijeme u datum prikladan za korisnika (i obrnuto), saznati trenutno vrijeme Unix epohe i dobiti Unix vrijeme u različiti jezici programiranje, DBMS i operativni sustavi.

Što je Unix vrijeme?

Unix era (Unix epoch) započela je u noći s 31. prosinca 1969. na 1. siječnja 1970. godine. Upravo je taj datum uzet kao početna točka za "računalno" vrijeme koje se računa u sekundama i zauzima vrlo malo prostora na disku - samo 4 ili 8 bajtova. S ovom metodom kodiranja, programeri mogu "sakriti" bilo koji datum u jedan broj i lako ga pretvoriti natrag u format koji korisnici mogu razumjeti.

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

Unix terminologija

Nekoliko riječi o pojmovima.

Tako, Unix vrijeme(ili POSIX vrijeme) je broj sekundi koje su protekle od ponoći, 1. siječnja 1970., do danas.

Unix vremenska oznaka(vremenska oznaka) 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 sustav "izdržljiv"?

Za samo nekoliko desetljeća, naime 19. siječnja 2038. u 03:14:08 UTC, Unix vrijeme će dosegnuti vrijednost 2147483648, a računalni sustavi mogu protumačiti ovaj broj kao negativan. Ključ za rješavanje ovog problema leži u korištenju 64-bitne (umjesto 32-bitne) varijable za pohranjivanje vremena. U ovom slučaju, zaliha brojčanih vrijednosti Unix vremena bit će dovoljna čovječanstvu za još 292 milijarde godina. Nije loše, zar ne?

Unix vrijeme je jedno za sve

Ako živite u Londonu ili San Franciscu, a vaši su prijatelji u Moskvi, tada možete "sinkronizirati satove" koristeći Unix vrijeme: ovaj sustav je u ovaj trenutak vrijeme je jedno za cijeli svijet. Naravno, ako je vrijeme na poslužiteljima ispravno postavljeno. I s alatom "Unixtime converter" ova konverzija će vam oduzeti djelić sekunde.

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

Što je Unix vrijeme i za što se koristi? Da bismo razumjeli za što se ovo koristi, počet ću s opći konceptšto je točno Unix vrijeme.

Unix vrijeme (ili TimeStamp, što u prijevodu na ruski znači "vremenski žig" i ima isto značenje) je broj sekundi od 1. siječnja 1970. godine. To jest, Unix TimeStamp na 01/01/1970 00:00:00 bio je jednak 0. Nakon 2 minute (120 sekundi), Unix vrijeme je već bilo jednako 120. Na primjer, danima kasnije (01.02.1970. 00:00:00) Unix vrijeme je bilo jednako 86400, budući da je prošlo 60 * 60 * 24 = 86 400 sekundi. Sada je Unix Time Stamp već 1566148027 i broj stalno raste, jer sekunde neprestano otkucavaju.

Ali zašto ga koristiti? Poanta je da je Unix TimeStamp prikladan za korištenje za pohranu i manipulaciju datumima tijekom programiranja. Neću ulaziti u detalje, ali ukratko, broj je puno praktičniji za čitanje i usporedbu od niza s "lijevim" znakovima. Zato većina programera koristi Unix TimeStamp za rad s datumom u svojim projektima, a u bazi podataka često vidimo jedan jako veliki broj u polju `date`, koji uopće ne izgleda kao datum.

Ovdje ovaj alat dobro dolazi. Pomoću njega možete jednostavno prevesti ovaj "veliki broj iz baze podataka" u datum čitljiv ljudima. 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 iz 2038

Kao što rekoh, broj Unix vremenska oznaka svaka sekunda postaje više za 1. Prije ili kasnije trebala bi doći granica ovog broja i to će biti tek 2038. godine. Stvar je u tome da je maksimalni broj u 32-bitnim operativnim sustavima raširenim početkom 21. stoljeća 2 31. Ovo je broj koji će Unix TimeStamp dosegnuti 2038. godine.

→ Rješenje za ovaj problem je već pronađeno. Kako 2038. stranice ne bi prestale ispravno brojati vrijeme, dovoljno je koristiti 64-bit operacijski sustav na hosting / VDS / namjenskom poslužitelju, a ne 32-bitnom. Uz aktivno rastući kapacitet računala i smanjenje njihove cijene, sve ide na to da će se do 2038. godine velika većina usluga u području osiguravanja prostora za stranice pružati na temelju 64-bitnog OS-a. Inače, u 64-bitnom sustavu takav problem nas neće pogađati barem 292 milijarde godina, što je sasvim dovoljno za prebrojavanje problem iz 2038 riješeno.

Samo za čitatelje Lifeexamplea moguće je otvoriti online trgovinu na Moguta.CMS uz 15% popusta

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

Pozdrav, dragi čitatelji bloga, u ovom članku želim vam reći o tome što jest Unix vrijeme i Unix vremenska oznaka... Programeri često kombiniraju ove koncepte u jedan, ali to nije sasvim točno. Osim toga, članak sadrži mnoge korisne napomene na temu rada s Unix Timestamp u PHP-u, MySQL-u i JavaScriptu.

Zašto Unix vrijeme počinje 1. siječnja 1970

Stvar je u tome da Unix vrijeme počinje računati Unix eru, s izdavanjem prve UNIX sustavi... Prvi sustav ove vrste stvoren je 1969. godine, pa su programeri uzeli datum od 1. siječnja 1970. u ponoć UTC ( UTC).

Hajde da shvatimo čemu služe Unix vrijeme i Unix Timestamp i dajmo im jasne koncepte.

Unix vremenska oznakaTo je vremenska oznaka, koja je niz znakova koji predstavlja broj sekundi koji su prošli od 1. siječnja 1970.

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

U vrijeme kada sam pisao ovaj post, Unix vrijeme bilo je jednako 1346765877 .

U trenutku čitanja, od strane vas, ove informacije, zapis vremena ( 1346765877 ) je već oznaka - Unix vremenska oznaka! Pretvorbom ove vremenske oznake u čitljiv oblik dobivamo datum 04-09-2012 i vrijeme 17:37:57.

Iskreno govoreći, po mom mišljenju nema posebnog smisla razdvajati ta dva pojma, ali je ipak korisno imati predodžbu o tome što čini Unix vrijeme a također je korisno razumjeti da broj maksimalno mogućih sekundi od 1970. ima ograničenje!

Kraj Unix ere doći će 2038

Činjenica: maksimum binarni broj na 32-bitnim sustavima je broj 01111111 11111111 11111111 11111111 pretvarajući ga u decimalni sustav, dobivamo broj 2147483647.

19. siječnja 2038 u 03:14:08 doći će trenutak kada će broj sekundi koje su prošle od početka Unix ere premašiti maksimum koji je dostupan u 32-bitnom sustavu, broj = 2147483647. Ako se bit prelije, datum će biti resetirati.

Vrlo je jednostavno testirati ovu teoriju ilustrativnim primjerom:

  • Otvorite standardni Windows kalkulator, pritisnite ALT + 3, to će ga pretvoriti u inženjerski prikaz;
  • Postavite način rada od 4 bajta i vrstu decimalnog unosa;
  • Napišite broj 2147483647;

  • Obratite pažnju na binarni prikaz broja;
  • Broju dodajte jedan;

  • Zbrajanje će rezultirati negativnim brojem!

Ako nastavimo dodavati jedan, onda ćemo dobiti cikličko zatvaranje.

Ova vrsta zvonjenja datuma pojavit će se od 19. siječnja 2038. na svim sustavima koji koriste 32-bitnu arhitekturu.

Zapravo, ne treba biti tužna, jer programeri računalnih sustava sve više uvode 64-bitne arhitekture u široku upotrebu. Vjerujmo da će stići na vrijeme do 2038. godine.

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

Rad s unix vremenskom oznakom

Vrlo važna točka pri radu s unix vremenskom oznakom u php ili mysql je potreba da se jasno razumiju prednosti i nedostaci ovog formata datuma.

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

Shvaćajući ovo ograničenje, postavlja se logično pitanje: " Zašto se zamarati predstavljanjem datuma u sekundama?"

Kada koristiti Unix vremensku oznaku

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

Spremanje količine podataka, po mom mišljenju, glavni je i neosporan plus u korištenju Unix vremena.

Osim toga, postoji niz korisnih nijansi dostupnih prilikom rada s njima UNIX vremenska oznaka u mysql... A budući da sve informacije moraju biti pohranjene na poslužitelju baze podataka, a on zauzvrat ima niz prednosti pri radu s 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 s unix-time formatom, postavljanjem koje odmah dobivamo korisnu prednost u odnosu na standardne formate DATUM i DATUM VRIJEME... Prednost je što izvođenjem operacije dodavanja novi unos u tablicu, stupac s ovom vrstom podataka se automatski popunjava. To znači da možemo uštedjeti ne samo na količini podataka, već i na procesorskom vremenu web poslužitelja.

Da bismo riječ pojačali djelima, postavit ćemo sljedeći zadatak: prilikom registracije novog korisnika u sustavu potrebno je unijeti datum njegovog dodavanja u bazu.

Ako je vrsta polja u kojem se pohranjuje datum u tablici DATUM VRIJEME, zatim zahtjev od PHP skripta izgledat će otprilike ovako:

Prednosti su očite!

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

Ima li smisla koristiti INT umjesto vremenske oznake

Mnogi programeri, kada rade s unix vremenskom oznakom, koriste cjelobrojni format int (11). Ovo je potpuno nerazuman pristup pitanju, budući da MySQL nudi mnoge korisne funkcije za tip vremenske oznake koje utječu na brzinu rada s njim. Stoga, pohranjivanjem vremenske oznake u INT, lišavamo se svake poslužiteljske podrške za ovaj format. To je otprilike isto kao pohranjivanje id-a u tipu varchar (11).

Međutim, postoji jedan izgovor za zadržavanje unix vremenska oznaka za INT... Prilikom prijenosa baze podataka između različitih DBMS-a može nastati sukob tipa, tj. za jedan od DBMS-ova, tip vremenske oznake može biti nepoznat. U ovom slučaju, korištenje int imat će prednost jer ovaj format nalazi se u svim DBMS-ima.

Kratak opis tipova MySQL kalendara

TIMESTAMP- vrsta podataka za pohranjivanje datuma i vremena. Podaci se pohranjuju kao broj sekundi od početka "Unix ere". Raspon vrijednosti je 1970-01-01 00:00:00 - 2038-12-31 00:00:00. Potrebno je 4 bajta.

DATUM- tip podataka za pohranjivanje datuma. Raspon vrijednosti je od 1000-01-01 do 9999-12-31. Potrebno je 3 bajta.

DATUM VRIJEME- vrsta podataka za pohranjivanje datuma i vremena. Raspon vrijednosti je 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- vrsta podataka za pohranjivanje vremena. Raspon je −828: 59: 59 - 828: 59: 59. Potrebno je 3 bajta.

Prijevod datuma u unixu

Vrijeme je da iznesemo neke korisne funkcije za prevođenje datuma u unix vremenska oznaka i natrag iz unix-vrijeme na čitljiv datum.

Kako dobiti trenutno UNIX vrijeme

  • PHP:

    vrijeme ();

  • JavaScript:

    Math.round (novi Datum () .getTime () / 1000.0);

  • MySQL:

    SELECT unix_timestamp (sada ());