Tech Help
Unix Timestamp sekunteina vs millisekunteina: miksi päiväys näyttää vuotta 1970
Jos Unix timestamp muuttuu päiväykseksi lähelle vuotta 1970, sekunnit on usein luettu millisekunteina. Näin erotat yksiköt.
Jos Unix timestamp antaa päiväyksen lähelle vuotta 1970, arvoa tulkitaan usein väärässä yksikössä.
Unix timestampit käyttävät yleensä sekunteja, JavaScript Date yleensä millisekunteja.
Nykyinen 10-numeroinen timestamp on usein sekunteja, 13-numeroinen usein millisekunteja. Jos yksiköt eivät täsmää, saatat joutua kertomaan tai jakamaan 1 000:lla.
Muunsit timestampin päiväykseksi ja päädyit tammikuuhun 1970. Kello on harvoin rikki. Luku luettiin millisekunteina, vaikka se oli tallennettu sekunteina—tai toisinpäin.
Mikä on Unix timestamp?
Unix timestamp mittaa aikaa Unix epochista: 1970-01-01 00:00:00 UTC. Se käyttää yleensä kokonaissekunteja. Sama hetki voidaan tallentaa myös millisekunteina (sekunnit × 1 000). Luku itse ei kerro yksikköä.
Sekunnit vs millisekunnit: 1 000-kertainen ero
Yksi sekunti on 1 000 millisekuntia. Vertaa 1720000000 ja 1720000000000. Jos ensimmäinen on sekunteja ja toinen millisekunteja, ne merkitsevät samaa hetkeä. Lue ensimmäinen millisekunteina, niin päiväys hyppää kohti vuotta 1970.
Nämä UTC-tulokset laskettiin yllä olevista luvuista, niitä ei arvattu.
| Arvo | Todennäköinen yksikkö | Tulkinta (UTC) |
|---|---|---|
| 1720000000 | Sekunnit | Nykyinen päiväys sekunteina: 2024-07-03 09:46:40 UTC |
| 1720000000000 | Millisekunnit | Sama hetki millisekunteina: 2024-07-03 09:46:40 UTC |
| 1720000000 millisekunteina | Väärä yksikkö | Päiväys lähellä vuotta 1970: 1970-01-20 21:46:40 UTC |
Miksi timestampini näyttää vuotta 1970?
Jos sekuntiarvo käsitellään millisekunteina, luku on 1 000 kertaa liian pieni. JavaScript laskee silloin vain lyhyen jakson Unix epochin jälkeen, joten päiväys jää vuoteen 1970:
const seconds = 1720000000;
new Date(seconds);
// 1970-01-20 21:46:40 UTC
new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC
Tuon vuoden 1970 päiväys on epoch plus noin kaksi viikkoa. Kerro sekunnit 1 000:lla ennen kuin annat ne Datelle.
- SEKUNNIT
- 1720000000
- MILLISEKUNNIT
- 1720000000000
- Sekuntiarvo
- Käsitelty virheellisesti millisekunteina
- Päiväys lähellä vuotta 1970
Jos tulos on lähellä vuotta 1970, tarkista timestampin yksikkö ennen aikavyöhykkeen selvittelyä.
Ovatko 10 numeroa sekunteja ja 13 millisekunteja?
Nykyisillä päiväyksillä 10 numeroa on usein sekunteja ja 13 usein millisekunteja. Se on nopea vihje, ei validointisääntö. Numeroiden määrä muuttuu aikavälin mukaan, ja jotkin API:t tallentavat mikro- tai nanosekunteja. Vahvista yksikkö dokumentaatiosta tai päiväyksestä, joka on järkevä.
Miksi tätä tapahtuu niin usein JavaScriptissä
JavaScriptissä numeerinen Date-arvo on millisekunteja epochista. Monet backendit, tietokannat ja Unix-työkalut tallentavat yhä sekunteja. Sekuntiarvon antaminen suoraan Datelle on siksi yleinen virhe:
const unixSeconds = 1720000000;
const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);
wrong on lähellä vuotta 1970 (1970-01-20 21:46:40 UTC). correct on nykyinen hetki (2024-07-03 09:46:40 UTC).
Muut järjestelmät käyttävät eri yksiköitä
Muut kielet, API:t ja tietokannat voivat käyttää sekunteja tai millisekunteja. Jotkut tallentavat mikro- tai nanosekunteja. Älä oleta, että kieli käyttää aina yhtä yksikköä—tarkista dokumentaatio. Jos luku on JSONissa, JSON-muotoilu ja vertailu tekee kentästä luettavan; yksikköä se ei silti kerro.
Miten tiedän, mitä yksikköä timestampini käyttää?
Käy nämä tarkistukset järjestyksessä. Pelkkä numeromäärä ei riitä.
- Tarkista API- tai tietokantadokumentaatio.
- Katso likimääräinen numeroiden määrä.
- Vertaa arvoa uskottavaan nykyiseen timestampiin.
- Kokeile arvoa sekunteina ja millisekunteina.
- Tarkista, onko tulos päiväys järkevä.
Jos yksi tulkinta osuu vuoteen 1970 ja toinen tunnistamaasi päiväykseen, syy on yksiköiden ristiriita.
Yleisiä Unix timestamp -virheitä
- Sekunnit tulkittu millisekunteiksi. Päiväys romahtaa kohti vuotta 1970, kuten yllä olevassa esimerkissä.
- Millisekunnit tulkittu sekunneiksi. Päiväys hyppää kauas tulevaisuuteen, tai muunnos epäonnistuu.
- Kertominen 1 000:lla kahdesti. Jo millisekunteina ollut arvo paisuu valtavaksi ja päiväys hyppää vuosisatoja eteen.
- Jakaminen 1 000:lla kahdesti. Sekuntiarvo kutistuu uudelleen, taas lähelle vuotta 1970.
- Aikavyöhykkeen syyttäminen. Vyöhyke voi siirtää tunteja tai kalenteripäivää. Se ei siirrä nykyistä timestampia vuoteen 1970.
- Muotoillun päiväysmerkkijonon käsittely Unix timestampina. Arvo kuten 2024-07-03T09:46:40Z ei ole epoch-luku. Jäsennä se päiväyksenä, ei sekunteina.
Aiheuttaako aikavyöhyke vuoden 1970 ongelman?
Yleensä ei. Aikavyöhyke voi muuttaa näytettyä kelloa ja lähellä keskiyötä kalenteripäivää. Se ei tee nykyisestä Unix timestampista vuotta 1970. Jos tulos on 1970, tarkista ensin sekunnit vastaan millisekunnit.
Muunna ja tarkista Unix timestamp
NEXNARA Päivämäärä- ja aikamuunnin voi muuntaa Unix timestampin selaimessa.
Liitä Unix-sekunteja tai millisekunteja, käytä nykyistä timestampia, näe UTC ja paikallinen aika, muunna aikavyöhykkeitä ja muotoile päiväys. Automaattinen tunnistus pitää 10 numeroa usein sekunteina ja 13 millisekunteina; voit silti valita yksikön.
Itse muunnos tapahtuu selaimessasi. Työkalu ei lähetä päiväyksiä tai timestampeja NEXNARA-palvelimelle. Mainokset ja muut sivuston toiminnot käyttävät yhä verkkoa; se on erillään muunnoksesta.
Pitääkö Unix timestamp tarkistaa? Avaa Päivämäärä- ja aikamuunnin ja vertaa sekunteja millisekunteihin.
FAQ
Miksi Unix timestampini näyttää vuotta 1970?
Usein kyse on sekunneista, jotka luettiin millisekunteina. JavaScript käsittelee paljon pienempää lukua, joten päiväys osuu heti 1970-01-01 00:00:00 UTC jälkeen. Kerro sekunnit 1 000:lla ja muunna uudelleen.
Ovatko Unix timestampit sekunteja vai millisekunteja?
Yleensä sekunteja. Monet web-API:t ja JavaScript Date käyttävät millisekunteja. Tarkista aina, mitä kyseinen järjestelmä dokumentoi. Jotkin järjestelmät käyttävät mikro- tai nanosekunteja.
Miten muunnan sekunnit millisekunneiksi?
Kerro 1 000:lla. 1720000000 sekuntia on 1720000000000 millisekuntia. Toiseen suuntaan jaa 1 000:lla.
Miksi JavaScript Date käyttää millisekunteja?
Numeerinen Date-timestamp JavaScriptissä on määritelty millisekunteiksi Unix epochista. Siksi new Date(unixSeconds) on väärin, kun unixSeconds on Unix-sekunteja.
Onko 10-numeroinen timestamp aina sekunteja?
Ei. Nykyisillä päiväyksillä se on usein sekunteja, ja 13 numeroa on usein millisekunteja. Numeromäärä on vihje, ei sääntö. Vahvista dokumentaatiolla tai päiväyksellä, joka on järkevä.
Sisältääkö Unix timestamp aikavyöhykkeen?
Ei. Unix timestamp on hetki, joka lasketaan 1970-01-01 00:00:00 UTC alkaen. Aikavyöhykkeet vaikuttavat näyttöön, ei lukuun itseensä.