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
Aiheeseen liittyvät työkalut
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
| Aikaleima | Päivämäärä (UTC) | Huomautus |
|---|---|---|
0 | 1970-01-01 00:00:00 | Unix-epokka |
1,000,000,000 | 2001-09-09 01:46:40 | 1 miljardi sekuntia |
2,000,000,000 | 2033-05-18 03:33:20 | 2 miljardia sekuntia |
2,147,483,647 | 2038-01-19 03:14:07 | Vuoden 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 |
|---|---|
| JavaScript | Math.floor(Date.now() / 1000) |
| Python | import time; int(time.time()) |
| PHP | time() |
| Bash | date +%s |
| SQL (PostgreSQL) | EXTRACT(EPOCH FROM NOW())::int |
| SQL (MySQL) | UNIX_TIMESTAMP() |
| Go | time.Now().Unix() |
| Rust | SystemTime::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
Unix-aikaleima: sekunnit vs millisekunnit ja niiden aiheuttamat virheetJavaScriptin ja useimpien backend-järjestelmien välinen sekuntien ja millisekuntien ristiriita on yksi yleisimmistä aikaleima-virheistä web-kehityksessä. Näin se näyttää ja miten se korjataan.
Unix-aikaleima ja vuoden 2038 ongelma selitettynäVuoden 2038 ongelma on todellinen ohjelmistovirhe, joka vaikuttaa järjestelmiin, jotka tallentavat Unix-aikaleimoja 32-bittisina kokonaislukuina. Tässä selvitys siitä, mikä aiheuttaa sen, mitkä järjestelmät ovat vaarassa, ja mitä asialle tehdään.
Epoch-aika API:issa ja lokeissa: miten luet ja muunnet sen oikeinEpoch-aika näkyy kaikkialla API:issa, tietokannoissa ja lokeissa, mutta se on helppo tulkita väärin. Tässä oppaassa selitetään, mitä epoch-aika tarkoittaa, miksi järjestelmät käyttävät sitä ja miten muunnat sen ilman tyypillisiä virheitä.