Ingen opplasting, 100% lokalt, ingen konto

Artikkel

ISO 8601-varigheter: hva P1DT2H betyr

Et svar fra YouTube Data API sier at en video varer PT4M13S. En kalenderinvitasjon bærer P15DT5H0M20S. En katalogtjener tidsstempler en konto med 20260424174227.0Z, som ser beslektet ut, men er noe helt annet. Disse kompakte strengene følger regler som er verdt å kjenne, for å lese dem feil gjør om minutter til måneder. Dette er en gjennomgang av ISO 8601-varighetsformatet: hva bokstavene betyr, hvor formatet dukker opp, og dets ene store finesse, at en varighet skrevet på denne måten ikke alltid er en fast tidsmengde.

P, T, og hva bokstavene betyr

En ISO 8601-varighet starter med P (periode). Deretter kommer datokomponentene, hver et tall etterfulgt av sin enhetsbokstav: Y år, M måneder, W uker, D dager. En T skiller datodelen fra tidsdelen: H timer, M minutter, S sekunder. Hver komponent er valgfri; du skriver bare det du trenger. PT15M er 15 minutter, P1DT2H er én dag og to timer, P3W er tre uker. T-en er ikke pynt: M betyr måneder før den og minutter etter den, så P1M er én måned mens PT1M er ett minutt. Den siste komponenten som er til stede, kan bære en desimalbrøk, som i PT0.5S for et halvt sekund. Og enhetene går ikke automatisk over i hverandre: PT90M er en fullstendig gyldig måte å skrive halvannen time på.

Oppbygningen av ISO 8601-varigheten P3Y6M4DT12H30M5S: P åpner perioden, Y M D er datoenheter, T bytter til tiden, H M S er tidsenheter

Hvor du faktisk møter formatet

Denne syntaksen finnes stillferdig overalt. YouTube Data API rapporterer hver videolengde som en ISO 8601-varighet (PT4M13S). HTML aksepterer varigheter i datetime-attributtet til time-elementet. Kalenderinvitasjoner bruker det: iCalendar-standarden (RFC 5545) skriver hendelseslengder som PT1H0M0S, selv om den utelater år og måneder fra grammatikken sin. xs:duration i XML Schema dekker den fullstendige formen og tillater til og med et innledende minustegn for negative varigheter. Standardbiblioteker tolker det direkte: java.time leser P- og T-strenger med Period.parse og Duration.parse, og samme oppdeling finnes i mange andre språk. Lager du maskinlesbare tidsplaner, feeder eller API-er, er dette formatet fellesspråket for "hvor lenge".

Hvorfor P1M ikke er et fast antall sekunder

PT15M er alltid 900 sekunder. P1M er ikke det: en måned varer 28, 29, 30 eller 31 dager avhengig av hvor den starter, så P1M blir først konkret når den forankres til en dato. Selv P1D er ikke garantert å være 24 timer. I EU stilles klokkene frem søndag 29. mars 2026, så den kalenderdagen varer bare 23 timer: å legge P1D (én kalenderdag) og å legge PT24H (nøyaktig 24 timer) til den samme lørdagskvelden ender opp på ulike tidspunkter. Det er derfor java.time har to typer, Period for kalenderenheter og Duration for eksakte sekunder, og derfor datobiblioteker ber om en referansedato før de konverterer en varighet. Behandle komponentene Y, M, W og D som kalenderaritmetikk, og bare H, M og S som faste tidsmengder.

Ikke en varighet: 20260424174227.0Z

En streng som 20260424174227.0Z ser ut som den kan høre til samme familie, men det er et tidsstempel, ikke en varighet, og heller ikke ISO 8601. Det er GeneralizedTime, et format fra ASN.1, notasjonen som brukes av LDAP-kataloger og X.509-sertifikater. Les den som felt med fast bredde: år 2026, måned 04, dag 24, deretter 17:42:27, en valgfri brøkdel (.0), og Z for UTC. Du møter den i Active Directory-attributter som whenCreated og whenChanged, i LDAP-eksporter, og inne i sertifikater, der RFC 5280 pålegger GeneralizedTime for gyldighetsdatoer fra og med år 2050. Kjennetegnet som skiller den fra ISO 8601s kompakte form, er den manglende T-en: ISO ville skrevet det samme tidspunktet som 20260424T174227Z.

GeneralizedTime-strengen 20260424174227.0Z dekodet felt for felt til 24. april 2026, 17:42:27 UTC

Å dekode en uten å lese standarden

For en enkeltstående streng bryter vår ISO-varighetskonverterer ned enhver P/T-varighet i komponentene og totalen i sekunder, og bygger strengen opp igjen fra tallene du skriver inn. Når det du har er to klokkeslett i stedet for en varighetsstreng (et skift som går fra 22:00 til 06:30, for eksempel), gir kalkulatoren for tidsvarighet den forløpte tiden, inkludert spenn som krysser midnatt. Begge kjører helt i nettleseren din: ingenting du skriver inn forlater enheten din. Og for rask lesing uten noe verktøy dekker to tommelfingerregler de fleste tilfeller: se etter T-en for å vite om en M betyr måneder eller minutter, og husk at alt til venstre for T-en er kalenderaritmetikk, ikke et fast antall sekunder.

Verktøy i denne artikkelen

Ofte stilte spørsmål

Er PT1M det samme som P1M?

Nei. Bokstaven M endrer betydning avhengig av T-skilletegnet: P1M er én måned, PT1M er ett minutt. Dette er den vanligste feillesningen av formatet, og enkelte API-feil har oppstått nettopp av denne grunn. Er du i tvil, se etter T-en først: alt før den telles i år, måneder, uker og dager; alt etter den telles i timer, minutter og sekunder. En korrekt utformet varighet har aldri tidsenheter før T-en eller datoenheter etter den.

Hvordan skriver man 90 minutter som en ISO 8601-varighet?

PT90M og PT1H30M er begge gyldige og beskriver samme tidsmengde. ISO 8601 tvinger ikke komponentene til å holde seg innenfor sine vanlige intervaller, så minutter over 59 eller timer over 23 er greit. Tolkere godtar begge skrivemåtene; hvilken en et system genererer, avhenger av om det normaliserer. Genererer du varigheter som mennesker skal lese, er PT1H30M vennligere; sammenligner du varigheter i kode, bør du sammenligne totalt antall sekunder i stedet for strengene, nettopp fordi to ulike strenger kan bety det samme.

Hva er forskjellen mellom en varighet og et intervall?

En varighet sier hvor lenge, uten posisjon i kalenderen: P3D er tre dager, med start hvor som helst. Et ISO 8601-intervall fester en varighet til faktiske datoer, skrevet med en skråstrek: 2026-07-04T00:00:00Z/P3D betyr de tre dagene som starter 4. juli 2026, og et start/slutt-par som 2026-07-04/2026-07-07 uttrykker det samme spennet. Det finnes også gjentakende intervaller med et R-prefiks: R5/2026-07-04T00:00:00Z/P1D betyr fem daglige gjentakelser fra det startpunktet. Intervaller løser opp tvetydigheten til kalenderenheter, siden P1M forankret til en dato alltid har én bestemt lengde.

Kilder