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.

Lyhyt vastaus

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
Sama hetki: sekunnit × 1 000 = millisekunnit.
  • Sekuntiarvo
  • Käsitelty virheellisesti millisekunteina
  • Päiväys lähellä vuotta 1970
Sekuntiarvo millisekunteina luettuna osuu lähelle Unix epochia.
Sekunteja vai millisekunteja?

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ä.

  1. Tarkista API- tai tietokantadokumentaatio.
  2. Katso likimääräinen numeroiden määrä.
  3. Vertaa arvoa uskottavaan nykyiseen timestampiin.
  4. Kokeile arvoa sekunteina ja millisekunteina.
  5. 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ä.