Jos olet koskaan tehnyt kyselyjä tietokannasta tai työskennellyt nykyaikaisen sovellusliittymän kanssa, olet todennäköisesti nähnyt päivämäärien palauttamisen ei "12.10.2026", vaan massiivisena, pelottavana numerosarjana, kuten 1791800000. Tämä on Unix-aikaleima, ja se on tietojenkäsittelytieteen ajankäytön yleinen selkäranka.
Päivämäärien ja aikojen käsittely ohjelmoinnissa on tunnetusti vaikeaa. Aikavyöhykkeet muuttuvat, kesäaika alkaa ja loppuu arvaamattomasti, ja karkausvuodet tuovat lisäpäiviä. Tämän kaoottisen todellisuuden ratkaisemiseksi Unix-käyttöjärjestelmän rakentaneet insinöörit päättivät keksiä oman absoluuttisen aikajanansa.
Alkuperä: 1. tammikuuta 1970
Unix-aikaleima on yksinkertaisesti sekuntien määrä, joka on kulunut 1. tammikuuta 1970 kello 00.00.00 UTC. Tämä tarkka hetki historiassa tunnetaan nimellä "Unix Epoch".
Miksi 1970? Koska 1970-luvun alussa varastointi oli uskomattoman kallista. Päivämäärän tallentaminen ihmisen luettavaksi merkkijonoksi, kuten "1970-01-01 00:00:00", vie lähes 20 tavua muistia. Sen tallentaminen yhtenä 32-bittisenä kokonaislukuna kesti vain 4 tavua. Tekemällä aloituspisteen lähellä Unixin keksimisaikaa, he maksimoivat tulevaisuuden ajan, jonka he pystyivät tallentamaan näille 4 tavulle.
Miksi kehittäjät rakastavat Unix-aikaleimoja
Ensisijainen syy siihen, että Unix-aika on yleisesti käytössä sovellusliittymissä, tietokannassa ja mikropalveluissa, on se, että sillä ei ole aikavyöhykettä. Se edustaa yhtä, absoluuttista hetkeä maailmanlaajuisesti.
Jos tallennat tapahtuman tietokantaan käyttämällä paikallista palvelinaikaa ("03:00 PM EST") ja siirrät myöhemmin palvelimesi Lontooseen, kaikki matematiikkasi katkeaa. Mutta jos tapahtuma tapahtuu aikaleimalla 1700000000, numero on sama riippumatta siitä, onko sitä kysyvä käyttäjä Tokiossa, New Yorkissa tai Pariisissa. Käyttöliittymäsovellus yksinkertaisesti ottaa kyseisen kokonaisluvun ja muuntaa sen matemaattisesti käyttäjän paikalliseksi aikavyöhykkeeksi näytöllä.
Muunna aikaleimat välittömästi
Älä yritä laskea sekunteja henkisesti. Käytä offline-työkaluamme kääntääksesi 10- tai 13-numeroiset aikaleimat välittömästi ihmisen luettavissa oleviksi päivämääriksi paikallisella aikavyöhykkeelläsi.
Avaa AikaleimamuunninSekunnit vs millisekunti (10 vs 13 numeron sääntö)
Yksi web-kehityksen yleisimmistä bugeista on aikaleiman välittäminen funktiolle ja päivämäärän saaminen vuonna 1970 tai 52 000. Tämä johtuu sekuntien ja millisekuntien sekoittumisesta.
- Tavallinen Unix-aika (sekunteina): 10-numeroinen luku (esim.
1700000000). Tämä on standardi Linuxissa, PHP:ssä ja useimmissa taustatietokannassa, kuten MySQL. - JavaScript-aika (millisekuntia): 13-numeroinen luku (esim.
1700000000000). JavaScriptinDate.now()-funktio sisältää millisekuntia tarkkuuden lisäämiseksi.
Jos syötät 10-numeroisen taustajärjestelmän aikaleiman JavaScriptiin kertomatta sitä 1000:lla, JavaScript olettaa, että puhut tammikuun 1970 ensimmäisistä päivistä.
// Correctly handling a Unix timestamp in JavaScript
const backendTimestamp = 1700000000;
const dateObject = new Date(backendTimestamp * 1000);
console.log(dateObject.toLocaleDateString()); // Converts to local user timezone
Vuoden 2038 ongelma (Y2K38)
Unix-ajalla on uhkaava määräaika. Koska se tallennettiin alun perin etumerkillisenä 32-bittisenä kokonaislukuna, sen enimmäismäärä on 2 147 483 647.
19. tammikuuta 2038 klo 03.14.07 UTC Unix-kello saavuttaa tämän enimmäismäärän. Sekuntia myöhemmin kokonaisluku ylivuoto muuttuu negatiiviseksi luvuksi. Vanhat järjestelmät, joita ei ole päivitetty 64-bittiseen arkkitehtuuriin, uskovat yhtäkkiä, että vuosi on 1901, mikä aiheuttaa katastrofaalisia ohjelmistovikoja maailmanlaajuisesti.
Onneksi lähes kaikki nykyaikaiset laitteistot, tietokannat ja ohjelmointikielet (kuten 64-bittiset Linux-ytimet ja moderni Node.js) ovat jo siirtyneet 64-bittiseen aikaan, mikä työntää seuraavan ylivuodon miljardeja vuosia tulevaisuuteen.
Usein kysytyt kysymykset (FAQ)
Muodostaako Unix-aika karkaussekunteja?
Yllättäen ei. Unix-aika olettaa, että joka päivä on tasan 86 400 sekuntia. Kun maailma lisää "karkaussekunnin" sopeutuakseen Maan pyörimiseen, Unix-järjestelmät yleensä vain toistavat saman aikaleiman kahdesti pysyäkseen synkronoituina rikkomatta matemaattisia laskelmia.
Voiko Unix-aikaleima olla negatiivinen?
Kyllä. Mikä tahansa aikaleima, joka on pienempi kuin 0, edustaa päivämäärää ennen Unixin aikakautta (1. tammikuuta 1970). Esimerkiksi -86400 tarkoittaa täsmälleen 31. joulukuuta 1969.
Miksi muunnetussa päivämäärässä näkyy aina vuosi 1970?
Välität todennäköisesti 10-numeroisen aikaleiman funktioon, joka odottaa 13 numeroa (millisekuntia). Kerro aikaleimasi 1000:lla ennen sen muuntamista.