Unix-aikaleima päivämääräksi -muunnin

Muunna Unix-aikaleima luettavaksi päivämääräksi ja ajaksi — tai mikä tahansa päivämäärä takaisin Unix-aikaleimaksi. Tukee sekunteja ja millisekunteja.

Jaa tämä työkalu

Upota sivustollesi

Mikä on Unix-aikaleima?

Unix-aikaleima, jota kutsutaan myös Unix timeksi tai POSIX timeksi, on sekuntimäärä, joka on kulunut siitä, kun 1970-01-01 00:00:00 UTC, eli Unix-epokasta. Se on laajasti käytetty standardi tietojenkäsittelyssa, koska se esittää ajanhetkeä yksittäisenä kokonaislukuna, mikä tekee tallentamisesta, vertailusta ja laskutoimituksista suoraviivaista.

JavaScript toimii sisäisesti millisekunteissa, joten Date.now() palauttaa Unix-aikaisen leiman kerrottuna 1000-luvulla. Monet sovellusliittymät, tietokannat ja taustajärjestelmät käyttävät sekunteja. Tämä työkalu hyväksyy molemmat muodot ja tunnistaa automaattisesti sekunnit tai millisekunnit antamasi luvun suuruuden perusteella.

Merkittäviä Unix-aikaleimoja

AikaleimaPäivämäärä (UTC)Huomautus
01970-01-01 00:00:00Unix-epokka
1,000,000,0002001-09-09 01:46:401 miljardi sekuntia
2,000,000,0002033-05-18 03:33:202 miljardia sekuntia
2,147,483,6472038-01-19 03:14:07Vuoden 2038 ongelma (enint. 32-bittinen)

Miksi 1970?

Unix-epokaksi valittiin 1. tammikuuta 1970 osittain sopimuksen perusteella ja osittain käytännöllisten rajoitteiden johdosta. Unixia kehitettiin 1960-luvun lopulla ja 1970-luvun alussa Bell Labsissa. Kehittäjät tarvitsivat tuoreean, pyöreän aloituspäivämäärän aikaesityksensä pohjaksi. 1. tammikuuta 1970 oli riittävän tuore ollakseen käytännöllinen, eikä sillä ollut erityistä teknistä merkitystä – se oli yksinkertaisesti kätevä ankkuripiste.

Muissa järjestelmissä käytetään vaihtoehtoisia epokkeja: Windows FILETIME -epokka on 1. tammikuuta 1601; GPS-aika alkaa 6. tammikuuta 1980; NTP-epokka on 1. tammikuuta 1900. Järjestelmien välillä muunnettaessa kunkin järjestelmän epokka on tärkeä tietää.

Sekunnit vai millisekunnit

Alkuperäinen Unix-aikaleima on sekunteissa. Useimmat palvelinpuolen kielet ja järjestelmät (Unix-kuori, Pythonin time.time(), PHPin time(), useimmat tietokannat) käyttävät sekunteja. JavaScriptin Date.now() ja new Date().getTime() palauttavat millisekunteja. Tämä epäsuhta on yleinen virheiden lähde, kun JavaScript-käyttöliittymät kommunikoivat taustajärjestelmän sovellusliittymien kanssa.

Unix-aikaleima sekunteissa on tällä hetkellä 10-numeroinen luku (noin 1 700 000 000 vuonna 2023). Millisekuntien aikaleima on 13-numeroinen luku. Laskuri tunnistaa, minkä muodon olet antanut, numeroiden lukumäärän perusteella ja muuntaa sen vastaavasti.

Vuoden 2038 ongelma

Järjestelmät, jotka tallentavat Unix-aikaleimoja 32-bittisena etumerkillisellä kokonaisluvulla, voivat edustaa vain päivämääriä 2,147,483,647 sekuntiin epokasta asti – mikä on 03:14:07 UTC 19. tammikuuta 2038. Tämän hetken jälkeen 32-bittinen etumerkillinen kokonaisluku ylivuotaa suureksi negatiiviseksi luvuksi, joka edustaa vuotta 1901.

Tätä kutsutaan joskus "Y2K38"-ongelmaksi tai Unix Millennium Bug'iksi. Nykyaikaiset 64-bittijärjestelmät eivät ole vaarassa, koska 64-bittinen etumerkillinen kokonaisluku voi edustaa aikaleimoja noin 292 miljardiksi vuodeksi. Sulautetut järjestelmät, perintötietokannat ja vanhempi 32-bittinen ohjelmisto voivat kuitenkin olla silti vaarassa. Monet alat – mukaan lukien televiestintä, pankkitoiminta ja teollisuuden ohjausjärjestelmät – pyrkivät aktiivisesti ratkaisemaan tätä.

Nykyisen Unix-aikaisen leiman hankkiminen

Kieli / ympäristöKomento
JavaScriptMath.floor(Date.now() / 1000)
Pythonimport time; int(time.time())
PHPtime()
Bashdate +%s
SQL (PostgreSQL)EXTRACT(EPOCH FROM NOW())::int
SQL (MySQL)UNIX_TIMESTAMP()
Gotime.Now().Unix()
RustSystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs()

Käytännön sovellukset

Sovellusliittymän kehittäminen: REST-sovellusliittymät käyttävät yleisesti Unix-aikaleimoja created_at-, updated_at- ja token-vanhentumiskentille. Aikaleima on aikavyöhykkeestä riippumaton ja yksiselitteinen – toisin kuin muotoillut päivämäärä-merkkijonot, jotka riippuvat kieliasetuksesta ja muotoilukonventioista.

Token-vanhentuminen: JWT (JSON Web Tokens) käyttää Unix-aikaleimoja exp (vanhentuminen) ja iat (myönnetty) -vaatimuksille. Token vanhentuu, kun nykyinen aikaleima ylittää exp-arvon. Vanhentumisaikojen laskeminen – "tämä token pitäisi vanhentua 24 tunnissa" – vaatii 86 400 sekunnin lisäämistä nykyiseen aikaleimaan.

Välimuistin TTL: Välimuistin vanhentuminen määritetään usein Unix-aikaleimaksi tai sekuntiena nyt. Välimuistin ongelmien virheenkorjaus vaatii usein tallennetun vanhentumisaikaisen leiman muuntamista ihmisten luettavaksi päivämääräksi.

Lokien analysointi: Palvelinlokit sisältävät usein Unix-aikaleimoja. Niiden muuntaminen luettaviksi päivämääriksi on ensimmäinen vaihe lokimerkintöjen yhdistämisessä todellisiin tapahtumiin.

Tietokannan tallentaminen: Aikaisten leimien tallentaminen kokonaislukuina muotoiltujen merkkijonojen sijaan välttää aikavyöhykkeen muunnosvirheet ja yksinkertaistaa lajittelua, aluekyselyitä ja aritmetiikkaa. Kysely "kaikista tietueista viimeisen 7 päivän aikana" muuttuu muotoon WHERE created_at > (NOW_UNIX - 604800).

Usein kysytyt kysymykset

Mikä on Unix-aikaleima?

Unix-aikaleima on sekuntien määrä, joka on kulunut 1. tammikuuta 1970 kello 00:00:00 UTC:sta — referenssipisteestä, jota kutsutaan Unix-epookiksi. Se edustaa mitä tahansa ajankohtaa yksittäisenä kokonaislukuna, mikä helpottaa tallentamista, vertailua ja laskutoimituksia. Se on standardi aikamuoto, jota käytetään useimmissa käyttöjärjestelmissä, tietokannoissa, API-rajapinnoissa ja ohjelmointikielissä.

Kuinka muunnan Unix-aikaleiman päivämääräksi?

Syötä aikaleima muuntimeen, joka palauttaa vastaavan päivämäärän ja kellonajan UTC:ssä ja paikallisessa aikavyöhykkeessäsi. Työkalu tunnistaa automaattisesti, oletko syöttänyt sekunteja (10-numeroinen luku) vai millisekunteja (13-numeroinen luku). Voit myös muuntaa toiseen suuntaan: valitse päivämäärä ja kellonaika saadaksesi vastaavan Unix-aikaleiman.

Mikä on ero Unix-ajan sekuntien ja millisekuntien välillä?

Alkuperäinen Unix-aikaleima on sekunneissa. Useimmat palvelinpuolen järjestelmät — PHP, Python, Go, Bash, SQL-tietokannat — käyttävät sekunteja. JavaScriptin Date.now() ja new Date().getTime() palauttavat millisekunnit (Unix-sekunnit × 1000). Sekuntiaikaleima on tällä hetkellä 10-numeroinen; millisekuntien aikaleima on 13-numeroinen. Näiden kahden sekoittaminen on yleinen virhe, kun JavaScript-käyttöliittymä lähettää aikaleiman taustajärjestelmälle, joka odottaa sekunteja.

Miksi Unix-aika alkaa 1. tammikuuta 1970?

Unix-kehittäjät Bell Labsissa valitsivat päivämäärän 1970-luvun alussa kätevänä viimeisenä lähtökohtana. Sillä ei ole erityistä merkitystä muuta kuin se, että se on pyöreä päivämäärä lähellä järjestelmän kehitysaikaa. Muut järjestelmät käyttävät eri epookkeja: Windows FILETIME alkaa 1. tammikuuta 1601; GPS-aika alkaa 6. tammikuuta 1980; NTP alkaa 1. tammikuuta 1900.

Mikä on vuoden 2038 ongelma?

Järjestelmät, jotka tallentavat Unix-aikaleiman etumerkilliseen 32-bittiseen kokonaislukuun, voivat edustaa päivämääriä vain 19. tammikuuta 2038 asti (aikaleima 2 147 483 647). Sen jälkeen arvo ylivuotaa suureen negatiiviseen lukuun, joka edustaa vuoden 1901 päivämäärää. Modernit 64-bittiset järjestelmät eivät ole vaikuttuneita. Kuitenkin vanhat upotetut järjestelmät, vanhemmat tietokannat ja 32-bittinen ohjelmisto saattavat olla yhä haavoittuvia ja vaatia siirtymisen ennen kyseistä päivämäärää.

Kuinka saan nykyisen Unix-aikaleiman ohjelmointikielessäni?

JavaScript: Math.floor(Date.now() / 1000). Python: import time; int(time.time()). PHP: time(). Bash: date +%s. PostgreSQL: EXTRACT(EPOCH FROM NOW())::int. MySQL: UNIX_TIMESTAMP(). Go: time.Now().Unix(). Nämä kaikki palauttavat nykyisen ajan sekunteina Unix-epookista.

Aiheeseen liittyvät artikkelit