Unix-tid, UTC og IANA-zoner
Et møde er et øjeblik. Et byur er en dekoration af det øjeblik. At blande de to i en database er, hvordan du får off-by-one-timer efter en DST-weekend.
Gem øjeblikke, ikke vægure
Unix-tid (POSIX-tid) er et antal sekunder siden 1970-01-01 00:00:00 UTC, med skudsekund-forbehold. Den aner ikke, om brugeren er i Chicago. Det er en feature: øjeblikket kan sammenlignes globalt.
Når du persisterer “09:00” uden zone, har du persisteret et vægur. Efter USA stiller frem, er 09:00 Eastern et andet øjeblik. Gentagne jobs, der spørger “hour = 9” i lokal tid, skal bruge et zone-id ved runtime, ikke et gemt heltals-time.
ISO-8601-strenge med et offset (2026-08-20T09:00:00-04:00) fryser offsettet. ISO-8601 med et zonenavn er sjældnere i vildmarken; Javas ZonedDateTime og Luxon kan. Til API’er er et øjeblik i UTC plus et separat IANA-id til visning den sædvanlige split.
Hvor IANA-id’et hører hjemme
Brugerprofil: America/Chicago. Begivenhed: gemt som UTC-øjeblik. UI: omregn med profilzonen, eller med en zone brugeren valgte til den begivenhed.
Cron på en server skal bruge UTC eller en eksplicit zone i scheduleren. “Hver dag kl. 09:00” på en maskine sat til UTC er 09:00 UTC, ikke 09:00 for kunderne i Lagos.
NowZones binder hver by til ét IANA-id i kataloget. Det tikkenede ur er Luxon (IANA tzdb), der renderer det id. Vi gemmer ikke Unix-tid i sidens HTML; vi formatterer en civil tid for det aktuelle øjeblik.
Klassiske fejl
At serialisere JavaScript Date som en localestring og parse den et andet sted. Date er et øjeblik; toLocaleString er dekoration. Rundtur ISO-øjeblikket.
At bruge getTimezoneOffset() én gang ved tilmelding og aldrig igen. Offsets ændrer sig. Gem id’et.
At antage at serverens zone er brugerens zone, fordi begge “er i skyen.” Skyen er UTC, medmindre du har konfigureret noget andet.
Prøv værktøjerne
Ofte stillede spørgsmål
- Skal jeg gemme tzdata på min bærbare for evigt?
- OS- og runtime-opdateringer sender tzdata. Hold dem aktuelle. Embedded enheder, der aldrig opdaterer, bliver forkerte efter en lovændring, selv om Unix-tid er perfekt.
- Er epoch-millis i orden?
- Ja til øjeblikke. Par dem med et IANA-id, når du skal vise et byur eller planlægge et lokalt 09:00.
- Blotter NowZones Unix-tid?
- Ikke som produktfeature. Omregneren og urene er civile. Udviklere kan stadig tænke i øjeblikke; siderne svarer på menneskelige spørgsmål.