Računalniki Windows Internet

Unix pretvornik. Trenutni čas epohe Unix. Kako pridobiti čas Unixa

  • UTC: Čas na glavnem poldnevniku se imenuje Univerzalni koordinirani čas. Neusklajenost kratice je bila posledica potrebe po njeni univerzalnosti za vse jezike.
  • GMT: Prej je bil namesto UTC uporabljen Greenwich Mean Time (GMT), saj je bil glavni meridian izbran za prehod skozi Kraljevski observatorij v Greenwichu.
  • Drugi časovni pasovi se lahko zapišejo kot odmik od UTC. Avstralski vzhodni standardni čas (EST) je na primer zapisan kot UTC + 1000, kar pomeni, da je 10:00 UTC 20:00 EST na isti dan.
  • Poletni čas ne vpliva na UTC. To je samo politična odločitev za spremembo časovnega pasu (zamik od UTC). GMT se na primer še vedno uporablja: pozimi je britanski nacionalni čas. Poleti postane BST.
  • Prestopne sekunde: Po mednarodni konvenciji UTC ni več kot 0,9 sekunde od fizične realnosti (UT1, ki se meri v sončnem času) z uvedbo "prestopne sekunde" na koncu zadnje minute leta v UTC ali zadnji minuti Junija.
  • Prestopnih sekund (astronomi) niso dolžni objaviti več kot 6 mesecev pred njihovo uvedbo. To je težava, če potrebujete kakršno koli načrtovanje z natančnostjo ene sekunde za več kot 6 mesecev.
  • Unix čas: Merjeno s številom sekund od »epohe« (začetek 1970 UTC). Časovni pasovi ali poletni čas ne vplivajo na čas Unixa.
  • V skladu s standardom POSIX.1 naj bi čas Unixa obravnaval preskočne sekunde s ponavljanjem prejšnje sekunde, na primer: 59,00 59,25 59,50 59,75 59,00 ← ponovite 59,25 59,50 59,75 00,00 ← prirastek 00,25 To je kompromis: ne morete izraziti nobene preskočne sekunde v sistemski uri in vaš čas je zagotovljen nazaj. Po drugi strani pa je vsak dan natanko 86.400 sekund in za pretvorbo časa Unixa v ure, minute-sekunde, ki jih človek bere, ne potrebujete tabele vseh preteklih in prihodnjih prestopnih sekund.
  • Predvideva se, da bo ntpd poskusil znova, ko bo prejel preskoke s časovnih strežnikov navzgor, vendar sem tudi videl, da ne naredi ničesar: sistem gre eno sekundo v prihodnost, nato pa se počasi prikrade nazaj na pravi čas.

Kaj bi moral vsak programer vedeti o času

  • Časovni pasovi se nanašajo na raven predstavitve
    Večina vaše kode se ne bi smela ukvarjati s časovnimi pasovi ali lokalnim časom, morala bi prenašati čas Unixa takšen, kot je.
  • Pri merjenju časa izmerite čas Unixa. To je UTC. Preprosto ga je dobiti (po sistemskih funkcijah). Nima časovnih pasov ali poletnega časa (in prestopnih sekund).
  • Ko shranjujete čas, shranite čas Unixa. To je ena številka.
  • Če želite ohraniti človeku berljiv čas (na primer v dnevnikih), ga poskusite obdržati skupaj s časom Unixa, ne namesto.
  • Ko prikazujete čas, vedno vključite zamik časovnega pasu. Oblika časa brez odmika je neuporabna.
  • Sistemska ura ni točna.
  • Ste na spletu? Sistemska ura vsakega drugega stroja ni natančna na drugačen način.
  • Sistemska ura lahko in bo skočila pravočasno nazaj in nazaj zaradi stvari, na katere nimate vpliva. Vaš program mora biti zasnovan tako, da to preživi.
  • Razmerje števila sekund sistemska ura na količino resnično sekunde niso točne in se lahko razlikujejo. Odvisno je predvsem od temperature.
  • Ne uporabljajte slepo gettimeofday (). Če želite monotono (vedno večjo) uro, si oglejte clock_gettime (). [Možnost Java: uporabite System.nanoTime () namesto System.currentTimeMillis ()]
  • ntpd lahko sistemski čas spremeni na dva načina:
    • Korak: ura takoj skoči naprej ali nazaj na pravi čas
    • Zagon: spremeni frekvenco sistemske ure, tako da se počasi premika proti pravemu času.
    Zvijanje je zaželeno, ker je manj škodljivo, vendar je uporabno le za odpravo majhnih razlik.

Posebni primeri

  • Za vse opazovalce čas teče s hitrostjo ene sekunde na sekundo. Pogostost oddaljenih ur glede na opazovalca je odvisna od hitrosti in teže. Ure v satelitih GPS so prilagojene, da premagajo učinke relativnosti.
  • MySQL shranjuje stolpce DATETIME kot vrednosti s številkami "YYYYMMDD HHMMSS" Če vas skrbi shranjevanje časovnih žigov, jih shranite kot celo število in uporabite funkcije UNIX_TIMESTAMP () in FROM_UNIXTIME () za pretvorbo.

Ker v dizelskem gorivu ni vgrajenih orodij, ustvarimo naslednji skript: #! / bin / sh truss date 2> & 1 | grep ^ time | awk "(print $ 3;)" exit $? ali nawk "BEGIN (print srand ())" ali na perl: perl -e "čas tiskanja," \ n ";" ugotovite datum spremembe datoteke: truss -v lstat -t lstat ls -l file.txt 2> & 1 1> / dev / null | grep "mt \ = \" | awk "(natisnite 9 USD;)"

Kako pridobiti čas Unixa v ...

Perl čas
PHP čas ()
Ruby Time.now (ali Time.new). Za izhod: Time.now.to_i
Python najprej čas uvoza, nato time.time ()
Java dolga doba = System.currentTimeMillis () / 1000;
Microsoft .NET C # epoch = (DateTime.Now.ToUniversalTime (). Klopi - 621355968000000000) / 10000000;
VBScript / ASP DateDiff ("s", "01/01/1970 00:00:00", Now ())
Erlang koledar: datetime_to_gregorian_seconds (koledar: now_to_universal_time (zdaj ())) - 719528 * 24 * 3600.
MySQL SELECT unix_timestamp (zdaj ())
PostgreSQL SELECT ekstrakt (epoha FROM now ());
SQL Server SELECT DATEDIFF (s, "1970-01-01 00:00:00", GETUTCDATE ())
JavaScript Math.round (new Date (). GetTime () / 1000.0) getTime () vrne čas v milisekundah.
Unix / Linux datum +% s
Drugi OS Ukazna vrstica: perl -e "čas tiskanja" (če je Perl nameščen v vašem sistemu)

Pretvarjanje datuma v čas Unixa v ...
PHP mktime ( pazi, minut, sekunde, mesec, dan, leto)
Ruby Time.local ( leto, mesec, dan, pazi, minut, sekunde, usec) (ali Time.gm za GMT / UTC izhod). Za prikaz dodajte .to_i
Python najprej čas uvoza, nato int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Java long epoch = new java.text.SimpleDateFormat ("dd / MM / llllll HH: mm: ss"). parse ("01/01/1970 01:00:00");
VBScript / ASP DateDiff ("s", "01/01/1970 00:00:00", polje za datum)
MySQL SELECT unix_timestamp ( čas) Oblika časa: LLLL-MM-DD HH: MM: SS ali LLMMDD ali LLLLMMDD
PostgreSQL SELECT izvleček (epoha OD datuma ("2000-01-01 12:34"));
S časovnim žigom: IZBERI IZVLEČEK (EPOH IZ ČASNEGA ŽAGA S ČASNIM ZONOM "2001-02-16 20: 38: 40-08"); Z intervalom: IZBERITE IZVLEČEK (EPOH IZ INTERVALA "5 dni 3 ure");
SQL Server SELECT DATEDIFF (s, "1970-01-01 00:00:00", polje za datum)
Unix / Linux datum +% s -d "1. januar 1980 00:00:01"

Pretvarjanje časa Unixa v človeško berljiv datum ...
PHP datum ( Oblika, unix čas);
Ruby Time.at ( unix čas)
Python najprej čas uvoza, nato time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( unix čas)) Za datum GMT zamenjajte time.localtime s time.gmtime.
Java Datum niza = nov java.text.SimpleDateFormat ("dd / MM / llllll HH: mm: ss"). Format (nov java.util.Date ( unix čas*1000));
VBScript / ASP DateAdd ("s", unix čas, "01/01/1970 00:00:00")
PostgreSQL IZBERITE ČASOVNI ŽAG Z ČASNIM ZONOM "epoha" + unix čas* INTERVAL "1 sekunda";
MySQL from_unixtime ( unix čas, neobvezno, izhodna oblika) Standardni izhodni format LLL-MM-DD HH: MM: SS
SQL Server DATEADD (s, unix čas, "1970-01-01 00:00:00")
Microsoft Excel = (A1 / 86400) + 25569 Rezultat bo v časovnem pasu GMT. Za druge časovne pasove: = ((A1 +/- časovna razlika za cono) / 86400) + 25569.
Linux datum -d @ 1190000000
Drugi OS Ukazna vrstica: perl -e "skalar tiskanja (localtime (localtime ( unix čas)) "(Če je nameščen Perl) Za časovni pas GMT / UTC zamenjajte" localtime "z" gmtime ".

Kaj je čas Unixa ali obdobje Unixa (obdobje Unixa ali čas Unixa ali čas POSIX ali časovni žig Unixa)?

Čas UNIX ali čas POSIX (angleški čas Unix)-način kodiranja časa, sprejet v UNIX in drugih operacijskih sistemih, združljivih s POSIX.
Za začetek odštevanja velja polnoč (UTC) od 31. decembra 1969 do 1. januarja 1970, čas od tega trenutka se imenuje "doba UNIX -a" (angleška Unix Epoha).
Čas UNIX je skladen z UTC, zlasti ko so prestopne sekunde razglašene za UTC, se ustrezne druge številke ponovijo.
Način shranjevanja časa v obliki števila sekund je zelo primeren za primerjavo datumov (natančno z drugo), pa tudi za shranjevanje datumov: po potrebi jih je mogoče pretvoriti v katero koli berljivo obliko. Datum in čas v tem formatu zavzemata tudi zelo malo prostora (4 ali 8 bajtov, odvisno od velikosti strojne besede), zato ga je smiselno uporabiti za shranjevanje velike količine datumov. Do pomanjkljivosti glede učinkovitosti lahko pride, če do elementov datuma dostopate zelo pogosto, na primer do številke meseca itd. Toda v večini primerov je učinkoviteje shranjevanje časa kot ene vrednosti in ne kot niza polj.

Pretvarjanje obdobja Unixa v človeško berljiv datum


Začetni in končni datum Unixa za leto, mesec ali dan


Pretvarjanje sekund v dneve, ure in minute


Kako pridobiti čas Unixa v ...

Perlčas
PHPčas ()
RubyTime.now (ali Time.new). Za izhod: Time.now.to_i
Pythonnajprej čas uvoza, nato time.time ()
Javadolga doba = System.currentTimeMillis () / 1000;
Microsoft .NET C #epoch = (DateTime.Now.ToUniversalTime (). Klopi - 621355968000000000) / 10000000;
VBScript / ASPDateDiff ("s", "01/01/1970 00:00:00", Now ())
Erlangkoledar: datetime_to_gregorian_seconds (koledar: now_to_universal_time (zdaj ())) - 719528 * 24 * 3600.
MySQLSELECT unix_timestamp (zdaj ())
PostgreSQLSELECT ekstrakt (epoha FROM now ());
SQL ServerSELECT DATEDIFF (s, "1970-01-01 00:00:00", GETUTCDATE ())
JavaScriptMath.round (new Date (). GetTime () / 1000.0) getTime () vrne čas v milisekundah.
Unix / Linuxdatum +% s
Drugi OSUkazna vrstica: perl -e "čas tiskanja" (če je Perl nameščen v vašem sistemu)

Pretvarjanje datuma v čas Unixa v ...

PHPmktime ( pazi, minut, sekunde, mesec, dan, leto)
RubyTime.local ( leto, mesec, dan, pazi, minut, sekunde, usec) (ali Time.gm za GMT / UTC izhod). Za prikaz dodajte .to_i
Pythonnajprej čas uvoza, nato int (time.mktime (time.strptime ("2000-01-01 12:34:00", "% Y-% m-% d% H:% M:% S")))
Javalong epoch = new java.text.SimpleDateFormat ("dd / MM / llllll HH: mm: ss"). parse ("01/01/1970 01:00:00");
VBScript / ASPDateDiff ("s", "01/01/1970 00:00:00", polje za datum)
MySQLSELECT unix_timestamp ( čas) Oblika časa: LLLL-MM-DD HH: MM: SS ali LLMMDD ali LLLLMMDD
PostgreSQLSELECT izvleček (epoha OD datuma ("2000-01-01 12:34"));
S časovnim žigom: IZBERI IZVLEČEK (EPOH IZ ČASNEGA ŽAGA S ČASNIM ZONOM "2001-02-16 20: 38: 40-08"); Z intervalom: IZBERITE IZVLEČEK (EPOH IZ INTERVALA "5 dni 3 ure");
SQL ServerSELECT DATEDIFF (s, "1970-01-01 00:00:00", polje za datum)
Unix / Linuxdatum +% s -d "1. januar 1980 00:00:01"

Pretvarjanje časa Unixa v človeško berljiv datum ...

PHPdatum ( Oblika, unix čas);
RubyTime.at ( unix čas)
Pythonnajprej čas uvoza, nato time.strftime ("% a,% d% b% Y% H:% M:% S +0000", time.localtime ( unix čas)) Za datum GMT zamenjajte time.localtime s time.gmtime.
JavaDatum niza = nov java.text.SimpleDateFormat ("dd / MM / llllll HH: mm: ss"). Format (nov java.util.Date ( unix čas*1000));
VBScript / ASPDateAdd ("s", unix čas, "01/01/1970 00:00:00")
PostgreSQLIZBERITE ČASOVNI ŽAG Z ČASNIM ZONOM "epoha" + unix čas* INTERVAL "1 sekunda";
MySQLfrom_unixtime ( unix čas, neobvezno, izhodna oblika) Standardni izhodni format LLL-MM-DD HH: MM: SS
SQL ServerDATEADD (s, unix čas, "1970-01-01 00:00:00")
Microsoft Excel= (A1 / 86400) + 25569 Rezultat bo v časovnem pasu GMT. Za druge časovne pasove: = ((A1 +/- časovna razlika za cono) / 86400) + 25569.
Linuxdatum -d @ 1190000000
Drugi OSUkazna vrstica: perl -e "skalar tiskanja (localtime (localtime ( unix čas)) "(Če je nameščen Perl) Za časovni pas GMT / UTC zamenjajte" localtime "z" gmtime ".

Za kaj je orodje "Unixtime Converter"?

To orodje bo najprej uporabno za spletne skrbnike, ki se nenehno ukvarjajo z velikimi količinami datumov ali se pri svojem delu pogosto sklicujejo na njihove elemente. Z orodjem "Unixtime Converter" lahko preprosto pretvorite čas Unixa v uporabniku prijazen datum (in obratno), ugotovite trenutni čas epohe Unixa in dobite čas Unixa v različne jezike programiranje, DBMS in operacijski sistemi.

Kaj je čas Unix?

Doba Unixa (epoha Unixa) se je začela v noči z 31. decembra 1969 na 1. januar 1970. Ta datum je bil vzet kot izhodišče za "računalniški" čas, ki se izračuna v sekundah in zavzame zelo malo prostora na disku - le 4 ali 8 bajtov. S to metodo kodiranja lahko programerji "skrijejo" kateri koli datum v eno številko in ga preprosto pretvorijo v obliko, ki jo uporabniki razumejo.

Čas Unix (imenovan tudi čas Unix ali čas POSIX) je primeren za uporabo v različnih operacijskih sistemih in programskih jezikih, saj je prikazan kot ena vrednost in ne kot določeno število polj, ki zavzamejo prostor. Poleg tega čas UNIX v celoti ustreza standardu UTC (tudi v prestopnih letih) - v tem primeru se ustrezne sekunde preprosto ponovijo.

Unix terminologija

Nekaj ​​besed o pogojih.

Torej, Unix čas(ali čas POSIX) je število sekund, ki so pretekle od polnoči, 1. januarja 1970, do danes.

Unixov časovni žig(časovni žig) je "določen" čas, z drugimi besedami, določen datum, označen s številko.

UTC(Univerzalni koordinirani čas) je Univerzalni koordinirani čas, ki je "pritrjen" na primarnem poldnevniku in od katerega se štejejo geografski časovni pasovi.

Kako "vzdržljiv" je sistem?

V samo nekaj desetletjih, in sicer 19. januarja 2038 ob 03:14:08 UTC, bo čas Unixa dosegel vrednost 2147483648, računalniški sistemi pa lahko to številko razlagajo kot negativno. Ključ do reševanja tega problema je uporaba 64-bitne (namesto 32-bitne) spremenljivke za shranjevanje časa. V tem primeru bo zaloga številskih vrednosti časa Unixa dovolj za človeštvo še 292 milijard let. Ni slabo, kajne?

Unix čas je eden za vse

Če živite v Londonu ali San Franciscu in so vaši prijatelji v Moskvi, potem lahko "sinhronizirate ure" z uporabo časa Unix: ta sistem je v ta trenutekčas je en za ves svet. Seveda, če je čas na strežnikih pravilno nastavljen. In z orodjem "Unixtime pretvornik" ta pretvorba vam bo vzela delček sekunde.

To orodje je potrebno za pretvorbo datuma iz formata Unix TimeStamp v datum, ki ga lahko bere človek, in obratno.

Kaj je čas Unixa in za kaj se uporablja? Za začetek bom razumel, za kaj se to uporablja splošni koncept kaj točno je čas Unixa.

Unix čas (ali časovni žig, ki v prevodu v ruščino pomeni "časovni žig" in ima enak pomen) je število sekund od 1. januarja 1970. To pomeni, da je bil časovni žig Unixa ob 01/01/1970 00:00:00 enak 0. Po 2 minutah (120 sekund) je bil čas Unixa že 120. Na primer, nekaj dni kasneje (01/02/1970 00: 00:00) Čas Unixa je bil enak 86400, saj je minilo 60 * 60 * 24 = 86400 sekund. Zdaj je Unixov časovni žig že 1566148027 in število nenehno narašča, saj sekunde nenehno tečejo.

Toda zakaj ga uporabljati? Bistvo je, da je časovni žig Unix priročen za shranjevanje in upravljanje datumov med programiranjem. Ne bom se spuščal v podrobnosti, skratka, številka je veliko bolj priročna za branje in primerjavo kot niz z "levimi" znaki. Zato večina razvijalcev uporablja Unix TimeStamp za delo z datumom v svojih projektih, v bazi podatkov pa pogosto vidimo eno zelo veliko število v polju `date`, ki sploh ni videti kot datum.

Tu pride v poštev to orodje. Z njeno pomočjo lahko to "veliko število iz zbirke podatkov" preprosto prevedete v človeško berljiv datum. Poleg tega lahko storite celo nasprotno in kateri koli datum spremenite v časovni žig Unix. To so možnosti, ki jih ima ta pretvornik.

Težava leta 2038

Kot sem rekel, številka Unix časovni žig vsaka sekunda se poveča za 1. Prej ali slej mora omejitev tega števila priti in to bo šele leta 2038. Dejstvo je, da je največje število 32-bitnih operacijskih sistemov, razširjenih na začetku 21. stoletja, 231. To je število, ki ga bo Unixov časovni žig dosegel leta 2038.

→ Rešitev tega problema je že najdena. Za zagotovitev, da leta 2038 spletna mesta ne prenehajo pravilno šteti časa, je dovolj, da uporabite 64-bitno operacijski sistem na gostiteljskem / VDS / namenskem strežniku, ne 32-bitnem. Z aktivno naraščajočimi zmogljivostmi računalnikov in znižanjem njihovih stroškov gre vse do dejstva, da bo do leta 2038 velika večina storitev na področju zagotavljanja prostora za spletno mesto zagotovljena na podlagi 64-bitnega OS. Mimogrede, v 64-bitnem sistemu nas taka težava ne bo prizadela vsaj 292 milijard let, kar je povsem dovolj za izračun problem leta 2038 rešeno.

Samo za bralce Lifeexample je možno odpreti spletno trgovino na Moguta.CMS s 15% popustom

Čas Unix in časovni žig Unixa (MySQL, PHP, JavaScript)

Pozdravljeni, dragi bralci bloga, v tem članku vam želim povedati, kaj je Unix čas in Unixov časovni žig... Programerji pogosto združujejo te koncepte v eno, vendar to ni povsem res. Poleg tega članek vsebuje veliko uporabnih opomb na temo dela s časovnim žigom Unix v PHP, MySQL in JavaScript.

Zakaj se čas Unixa začne 1. januarja 1970

Stvar je v tem, da čas Unixa začne šteti obdobje Unixa, z izidom prvega Sistemi UNIX... Prvi tovrstni sistem je bil ustvarjen leta 1969, zato so razvijalci datum vzeli 1. januarja 1970 ob polnoči UTC ( UTC).

Razumejmo, čemu služita čas Unixa in časovni žig Unixa, ter jim dajmo jasne koncepte.

Unixov časovni žigJe časovni žig, ki je zaporedje znakov, ki predstavlja število sekund, ki so pretekle od 1. januarja 1970.

Poskušal bom navesti primer, da razjasnim razliko med tema dvema konceptoma.

V času mojega pisanja, Unix čas bilo je enako 1346765877 .

Ko ste prebrali te podatke, zapis o času ( 1346765877 ) je že oznaka - Unixov časovni žig! S pretvorbo tega časovnega žiga v berljivo obliko dobimo datum 04-09-2012 in čas 17:37:57.

Odkrito povedano, po mojem mnenju ni posebnega smisla ločevati oba pojma, vendar je vseeno koristno imeti predstavo o tem, kaj sestavlja Čas Unixa koristno pa je tudi razumeti, da je število največjih možnih sekund od leta 1970 omejeno!

Konec obdobja Unixa bo prišel leta 2038

Dejstvo: največ binarna številka v 32 -bitnih sistemih je število 01111111 11111111 11111111 11111111 pretvorbo v decimalni sistem dobimo številko 2147483647.

19. januar 2038 ob 03:14:08 bo prišel trenutek, ko bo število sekund, ki so pretekle od začetka dobe Unixa, preseglo največjo vrednost, ki je na voljo v 32-bitnem sistemu, številka = 2147483647. Če se bit prelije, bo datum ponastaviti.

To teorijo je zelo preprosto preizkusiti z ilustrativnim primerom:

  • Odprite standardni kalkulator sistema Windows, pritisnite ALT + 3, to bo spremenilo v inženirski pogled;
  • Nastavite 4 -bajtni način in vrsto decimalnega vnosa;
  • Napišite številko 2147483647;

  • Upoštevajte binarni prikaz števila;
  • Številki dodajte eno;

  • Dodatek bo imel negativno število!

Če še naprej dodajamo eno, dobimo ciklično zapiranje.

Tovrstno zvonjenje datumov se bo pojavilo od 19. januarja 2038 v vseh sistemih, ki uporabljajo 32-bitno arhitekturo.

Pravzaprav ni treba biti žalosten, saj razvijalci računalniških sistemov vse pogosteje uvajajo 64-bitno arhitekturo v široko uporabo. Verjamemo, da bodo prišli do leta 2038.

Zdaj pa se pogovorimo o uporabi časovnega žiga unix v php, mysql in celo v javascript.

Delo s časovnim žigom unix

Zelo pomembna točka pri delu s časovnim žigom unix v php ali mysql je potreba po jasnem razumevanju prednosti in slabosti te oblike zapisa datuma.

Na primer, TIMESTAMP ni mogoče uporabiti za določanje zgodovinskih dogodkov ali dogodkov v daljni prihodnosti. Celoten nabor datumov je omejen na obdobje od leta 1970 do začetka 2038. Če nastavite datum po letu 2038, ga 32 -bitni sistem ne bo pravilno razlagal.

Ob spoznanju te omejitve se pojavi logično vprašanje: " Zakaj bi se trudili predstavljati datum v nekaj sekundah?"

Kdaj uporabiti časovni žig Unix

Za prikaz časa v našem običajnem sistemu merjenja je potrebnih 8 bajtov, za časovni žig unix pa polovico manj - 4 bajte.

Varčevanje količine podatkov je po mojem mnenju glavni in nesporni plus pri uporabi časa Unix.

Poleg tega so pri delu na voljo številne uporabne odtenke Časovni žig UNIX v datoteki mysql... In ker morajo biti vsi podatki shranjeni na strežniku zbirk podatkov, ta pa ima pri delu s časovnimi oznakami Unix številne prednosti, je izbiro časovnega žiga unix mogoče pravilno utemeljiti z naslednjimi določbami.

MySQL ponuja primeren podatkovni tip Timestamp za delo s formatom unix-time, pri čemer takoj dobimo koristno prednost pred standardnimi oblikami DATE in DATUM ČAS... Prednost je v tem, da z izvajanjem operacije dodajanja nov vnos v tabelo se stolpec s tem tipom podatkov samodejno izpolni. To pomeni, da lahko prihranimo ne le pri količini podatkov, temveč tudi pri času procesorja spletnega strežnika.

Za okrepitev besede z dejanji bomo postavili naslednjo nalogo: pri registraciji novega uporabnika v sistem morate vnesti datum njegovega dodajanja v bazo podatkov.

Če je vrsta polja, ki shranjuje datum v tabeli, enaka DATUM ČAS, nato zahtevo od PHP skript bo videti nekako takole:

Prednosti so očitne!

Obstaja tudi minus: če je več polj TIMESTAMP, se samodejno posodobi samo prvo.

Ali je smiselno uporabiti INT namesto časovnega žiga

Mnogi programerji pri delu s časovnim žigom unix uporabljajo celoštevilski format int (11). To je popolnoma nerazumen pristop k vprašanju, saj MySQL ponuja številne uporabne funkcije za vrsto časovnega žiga, ki vplivajo na hitrost dela z njim. Zato se s shranjevanjem časovnega žiga v INT prikrajšamo za vso podporo strežnika za to obliko. To je približno enako shranjevanju id v vrsti varchar (11).

Vendar obstaja en izgovor za ohranitev unix časovni žig na INT... Pri prenosu baze podatkov med različnimi DBMS lahko nastane navzkrižje tipov, tj. za enega od DBMS je lahko vrsta časovnega žiga neznana. V tem primeru bo uporaba int imela prednost od tej obliki je v vseh DBMS.

Kratke značilnosti vrst koledarja MySQL

TIMESTAMP- podatkovni tip za shranjevanje datuma in ure. Podatki so shranjeni kot število sekund od začetka "dobe Unixa". Obseg vrednosti je 1970-01-01 00:00:00-2038-12-31 00:00:00. Potrebuje 4 bajte.

DATE- podatkovni tip za shranjevanje datuma. Razpon vrednosti je od 1000-01-01 do 9999-12-31. Potrebuje 3 bajte.

DATUM ČAS- podatkovni tip za shranjevanje datuma in ure. Razpon vrednosti je 1000-01-01 00:00:00-9999-12-31 00:00:00. Potrebuje 8 bajtov in je shranjen kot številka LLLLMMDDHHMMSS./p>

LETO- podatkovni tip za shranjevanje leta. Razpon vrednosti: 1901 - 2155. Zaseda 1 bajt.

ČAS- podatkovni tip za shranjevanje časa. Razpon je −828: 59: 59 - 828: 59: 59. Potrebuje 3 bajte.

Prevedba datuma v unixu

Čas je, da določite nekaj uporabnih funkcij za pretvorbo datuma unix časovni žig in nazaj od unix-čas na berljiv datum.

Kako pridobiti trenutni čas UNIX

  • PHP:

    čas ();

  • JavaScript:

    Math.round (nov datum () .getTime () / 1000.0);

  • MySQL:

    SELECT unix_timestamp (zdaj ());