Unix-tid og ISO 8601-skrivemåten
Enhet utenfor SI · størrelse: et tidspunkt som et helt antall sekunder siden 1970
Den nittende januar 2038 klokken tre fjorten og sju sekunder verdenstid når en trettito bit bred sekundteller verdien 2 147 483 647 — det største tallet den makter å romme. Neste tikk løfter den øverste biten, og det samme binære ordet leses heretter som negativt: klokker som holder tiden etter nettopp denne tellingen, havner ikke i 2038, men i desember 1901. Noen kuriositet fra en fjern framtid er det ikke — en industristyring eller en vannmåler tjener lenger enn de tolv årene som gjenstår.
Tellingen er bygd ytterst enkelt: sekundene løper etter hverandre fra midnatt den første januar 1970, og et døgn rommer i den alltid nøyaktig 86 400 sekunder. Nettopp enkelheten er kilden til begge særtrekkene. På den ene siden følger en kalenderdato øyeblikkelig av tallet og omvendt, slik at enhver hendelseslogg, enhver database og ethvert filsystem holder tiden med den. På den andre lar et skuddsekund seg overhodet ikke uttrykke i en slik telling, hvilket betyr at den tross navnet ikke nummererer sekunder, men døgn med brøkdeler, og i virkeligheten er en lineær funksjon av UTC-skrivemåten og ikke en teller av forløpt tid.
01 · Definisjon
Unix-tiden er antallet sekunder som er gått siden midnatt den første januar 1970 koordinert verdenstid, under forutsetning av at hvert døgn rommer nøyaktig 86 400 sekunder. ISO 8601-skrivemåten angir det samme på annet vis: med kalenderdato, klokkeslett og angivelse av avviket fra nullmeridianen, idet feltene løper strengt fra grovt til fint.
Forbeholdet om 86 400 sekunder er ingen bagatell, men det vesentligste i definisjonen. Et skuddsekund, kunngjort av jordrotasjonstjenesten, kan tellingen ikke romme, og derfor gjentar systemet i innsettingsøyeblikket enten én og samme verdi to ganger eller stiller klokken tilbake. Av dette følger noe viktig: differansen mellom to unix-tall er ikke antallet sekunder som virkelig er gått mellom to hendelser dersom et skuddsekund lå imellom — avviket fra atomtidsskalaen har alt vokst til tjuesju sekunder.
Grensen derimot avhenger ikke av definisjonen, men av lagringens bredde. Trettito bit med fortegn gir den største verdien 2 147 483 647, som faller på den nittende januar 2038; neste økning setter den øverste biten til én og gjør tallet negativt, hvorved klokken kastes tilbake til den trettende desember 1901. Sekstifire bit skyver grensen to hundre og nittito milliarder år framover, men hele nanosekunder i de samme sekstifire bitene tar slutt allerede i 2262.
Skrivemåten etter standarden løser en annen oppgave — utveksling framfor lagring — og derfor teller i den ting tallet slett ikke har: tidssonen, skilletegnet mellom dato og tid, og regelen om at ved lik tegnlengde faller den leksikografiske ordenen sammen med den kronologiske. Nettopp denne siste egenskapen har gjort formatet til grunnlaget for sortering i filnavn og logger.
Før tiden med glidebryteren og se registeret fylles: bitene tennes fra høyre mot venstre, og så lenge den øverste, fortegnsbiten, forblir mørk, er tallet positivt og datoen vokser. Så snart telleren trår forbi 2 147 483 647, blusser den øverste biten rødt opp, hele tallet blir negativt, og klokken hopper til 1901.
Den grønne rette linjen er atomtidsskalaen, der hvert sekund virkelig er et sekund. Den røde trappelinjen er unix-tiden, som ved hver innsetting gir ut ett og samme tidsstempel to ganger, hvorfor linjen står stille på stedet. Avviket utgjør alt tjuesju sekunder og vokser, og derfor duger tellingen til en kalenderdato, men ikke til å måle varigheter i fysikken.
02 · Omregning
Skriv inn tidsstempel eller dato
Mellom alle multipler av tellingen — sekunder, millisekunder, mikro- og nanosekunder — er omregningene nøyaktige, siden de bare skiller seg med en faktor. Omtrentlig er én eneste linje: omregningen til atomtidsskalaen krever at man vet hvor mange skuddsekunder som er samlet opp fram til det gitte tidspunktet.
Tolkningen av en standardstreng gjør bladet i den utvidede skrivemåten med bokstaven Z; grunnformen uten skilletegn ligger i de fine innstillingene.
År 2038-problemet ligger ikke i standarden, men i maskinvaren og i gammel kode: trettito bit brede tidsstempler sitter i målernes fastvare, i industristyringer, i filsystemformater og i databaser der feltet alt er erklært som fire byte. Å endre typen i kildekoden er lett nok; å gå gjennom millioner av installerte apparater i de tolv årene som gjenstår er en oppgave av samme slag som den før år 2000.
| Verdi | Merknad | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Størrelsesordener
logaritmisk skala: fra ett sekund til grensen for sekstifire bit04 · Måleinstrumenter
Hva som setter stempelet på en hendelse
En egen brikke med batteri som fører tellingen mens apparatet er slått av. Den lagrer for det meste ikke et unix-stempel, men kalenderfeltene hver for seg, og bredden på årsfeltet er dens egen, slik at samtalen om 2038 ved gamle kretskort begynner med spørsmålet om hvilket år brikken selv teller til.
NTP-protokollen bringer en maskins klokke til felles tid med noen få millisekunders nøyaktighet, og den varsler også med et eget flagg et døgn i forveien om en innsetting. En egen grense har den også, og den inntreffer tidligere: det telles fra 1900 i trettito bit uten fortegn, og overflyten faller i februar 2036.
I en logg skrives tidsstempelet enten som tall eller som streng etter standarden, og det andre er å foretrekke av nøyaktig én grunn: for strenger av lik lengde faller den alfabetiske ordenen sammen med den kronologiske, slik at postene sorteres uten at datoen tolkes. Nettopp derfor har formatet spredt seg langt utenfor datateknikken.
Et apparats beredskap for 2038 kan prøves på én eneste måte — still klokken på det forbi den skjebnesvangre grensen og se hva som blir av logger, sertifikater og intervallregning. Slik har man alt funnet svikt i fakturering, i adgangssystemer og i nøklers gyldighetstider, der en dato i framtiden dannes ved addisjon og flyter over lenge før selve grensen.
05 · Skriveregler
Fra grovt til fint, og alltid med tidssone
Standarden krever synkende rekkefølge på feltene, fire sifre i året, bindestrek som datoskilletegn og bokstaven T foran tiden; tidssonen angis enten med bokstaven Z for nullmeridianen eller som pluss-minus timer og minutter. Et unix-stempel skrives som et helt tall uten siffergruppering, og multiplumet må alltid angis, siden en faktor tusen skiller sekunder fra millisekunder, og de to er lette å forveksle etter tallets størrelse.
Den første skrivemåten leses ulikt i ulike land og er derfor utillatelig i datautveksling. Den andre utelater både skilletegnet og tidssonen, slik at tidspunktet forblir ubestemt et døgn til hver side. Den tredje mister de innledende nullene, hvorfor strengene slutter å sortere alfabetisk — og det er nettopp for den egenskapen formatet verdsettes. Den fjerde likestiller unix-tellingen med atomtidsskalaen, mens tjuesju sekunder oppsamlede skuddsekunder ligger mellom dem.
06 · Naboenheter
Ved siden av står alle tellinger som er bygd etter samme prinsipp, men fra en annen begynnelse: NTP-tiden fra 1900, den julianske datoen fra middag i året 4713 før vår tidsregning, satellittsystemets skala fra januar 1980. De skiller seg bare i epoke og enhet, og omregnes derfor ved å trekke fra en konstant.
fortegnsbeheftede sekunder
grensen faller alt i 2036
skuddsekunder ærlig medregnet
Blant databladene til Simetrium står ved siden av den julianske datoen, som omregningskonstanten er hentet fra, skalaene UTC, TAI og UT1, som forklarer de manglende skuddsekundene, sekund som tellingens enhet, og biten, hvis bredde er det som fastsetter grensen.
07 · Historisk del
En epoke valgt av mangel på bit
I den første unix-håndboken ble tiden telt i sekstideler av et sekund fra begynnelsen av 1971, og i trettito bit rommet en slik telling bare drøyt to år. De tok slutt så raskt at epoken måtte ha vært flyttet ved hver utgave av systemet, og man ga opp sekundets brøkdeler til fordel for hele.
Ved overgangen til hele sekunder vant utviklerne et forråd på hundre og trettiseks år og kunne velge begynnelsen etter bekvemmelighet framfor av nød. Man tok den første januar 1970 — den nærmeste runde datoen i fortiden, som maskinnotater likevel ikke nådde til — og har siden ikke endret den en eneste gang, selv om systemet mer enn én gang er skrevet om fra bunnen.
Den internasjonale standardiseringsorganisasjonen førte de sprikende nasjonale formatene sammen til ett og la en enkel regel til grunn: feltene løper fra grovt til fint, alle med innledende nuller. Bivirkningen viste seg viktigere enn hensikten — slike strenger sorteres som tall, og formatet spredte seg til filnavn, logger og utvekslingsprotokoller.
Skrivebords- og serversystemer gikk over til sekstifire bit for lenge siden, og der er grensen skjøvet utenfor enhver fornuftig horisont. Faren er blitt igjen andre steder: i fastvaren til instrumenter med tjue års levetid, i filformater der feltet er erklært som fire byte, og i beregninger av framtidige frister, som flyter over allerede i dag så snart man legger femten år til dagens dato.
En telling som tross navnet ikke teller sekunder
Definisjonen av unix-tid høres ut som en telling av sekunder, men kravet om glatte 86 400 sekunder i døgnet gjør den til noe annet: til en lineær funksjon av UTC-skrivemåten og ikke til et mål på forløpt tid. Hver gang jordrotasjonstjenesten kunngjør en innsetting, må tellingen gjenta én og samme verdi to ganger eller hoppe tilbake, og differansen mellom to stempler mister nettopp det sekundet. I løpet av et halvt århundre har tjuesju slike tap samlet seg, og derfor tar man ved oppgaver som krever en virkelig varighet atomtidsskalaen og ikke denne.
Det andre særtrekket ligger slett ikke i definisjonen, men i lagringsmåten, og det gjør den til den eneste grensen i katalogen vår som verken naturen eller en avtale har satt, men bredden på et maskinord. Den julianske datoen tar aldri slutt, fordi den er et tall; unix-tiden tar slutt den nittende januar 2038, fordi den er et felt på fire byte. Forskjellen mellom en størrelse og dens representasjon opptar vanligvis metrologer lite, og her er det nettopp den som avgjør alt.
Katalog · måleenheter
Et datablad for hver størrelse
Sju SI-basisenheter, tjueto avledede med egne navn og størrelser utenfor systemet, som verken teknikken eller kalenderen klarer seg uten.