Ingen upload, 100% lokalt, ingen konto

Artikel

ISO 8601-varigheder: hvad P1DT2H betyder

Et svar fra YouTube Data API siger, at en video varer PT4M13S. En kalenderinvitation bærer P15DT5H0M20S. En katalogserver tidsstempler en konto med 20260424174227.0Z, som ser beslægtet ud, men er noget helt andet. Disse kompakte strenge følger regler, det er værd at kende, for at læse dem forkert gør minutter til måneder. Dette er en gennemgang af ISO 8601-varighedsformatet: hvad bogstaverne betyder, hvor formatet dukker op, og dets ene store finesse, at en varighed skrevet på denne måde ikke altid er en fast mængde tid.

P, T, og hvad bogstaverne betyder

En ISO 8601-varighed starter med P (periode). Derefter kommer datokomponenterne, hver et tal efterfulgt af sit enhedsbogstav: Y år, M måneder, W uger, D dage. Et T adskiller datodelen fra tidsdelen: H timer, M minutter, S sekunder. Hver komponent er valgfri; du skriver kun det, du har brug for. PT15M er 15 minutter, P1DT2H er én dag og to timer, P3W er tre uger. T'et er ikke pynt: M betyder måneder før det og minutter efter det, så P1M er én måned, mens PT1M er ét minut. Den sidste komponent, der er til stede, kan bære en decimalbrøk, som i PT0.5S for et halvt sekund. Og enhederne går ikke automatisk over i hinanden: PT90M er en fuldt gyldig måde at skrive halvanden time på.

Opbygningen af ISO 8601-varigheden P3Y6M4DT12H30M5S: P åbner perioden, Y M D er datoenheder, T skifter til tiden, H M S er tidsenheder

Hvor du faktisk møder formatet

Denne syntaks findes stille og roligt overalt. YouTube Data API rapporterer hver videolængde som en ISO 8601-varighed (PT4M13S). HTML accepterer varigheder i datetime-attributten på time-elementet. Kalenderinvitationer bruger det: iCalendar-standarden (RFC 5545) skriver hændelseslængder som PT1H0M0S, selvom den udelader år og måneder fra sin grammatik. xs:duration i XML Schema dækker den fulde form og tillader endda et indledende minustegn for negative varigheder. Standardbiblioteker fortolker det direkte: java.time læser P- og T-strenge med Period.parse og Duration.parse, og den samme opdeling findes i mange andre sprog. Producerer du maskinlæsbare tidsplaner, feeds eller API'er, er dette format fællessproget for "hvor længe".

Hvorfor P1M ikke er et fast antal sekunder

PT15M er altid 900 sekunder. P1M er det ikke: en måned varer 28, 29, 30 eller 31 dage afhængigt af, hvor den starter, så P1M bliver først konkret, når den forankres til en dato. Selv P1D er ikke garanteret at være 24 timer. I EU stilles urene frem søndag den 29. marts 2026, så den kalenderdag varer kun 23 timer: at lægge P1D (én kalenderdag) og at lægge PT24H (præcis 24 timer) til den samme lørdag aften ender på forskellige tidspunkter. Det er derfor, java.time har to typer, Period til kalenderenheder og Duration til eksakte sekunder, og derfor datobiblioteker beder om en referencedato, før de konverterer en varighed. Behandl komponenterne Y, M, W og D som kalenderaritmetik, og kun H, M og S som faste tidsmængder.

Ikke en varighed: 20260424174227.0Z

En streng som 20260424174227.0Z ser ud, som om den kunne høre til samme familie, men det er et tidsstempel, ikke en varighed, og heller ikke ISO 8601. Det er GeneralizedTime, et format fra ASN.1, notationen der bruges af LDAP-kataloger og X.509-certifikater. Læs den som felter med fast bredde: år 2026, måned 04, dag 24, derefter 17:42:27, en valgfri brøkdel (.0), og Z for UTC. Du møder den i Active Directory-attributter som whenCreated og whenChanged, i LDAP-eksporter, og inde i certifikater, hvor RFC 5280 kræver GeneralizedTime for gyldighedsdatoer fra og med år 2050. Kendetegnet, der adskiller den fra ISO 8601's kompakte form, er det manglende T: ISO ville skrive det samme tidspunkt som 20260424T174227Z.

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

At afkode en uden at læse standarden

For en enkeltstående streng opdeler vores ISO-varighedskonverter enhver P/T-varighed i dens komponenter og dens total i sekunder, og bygger strengen op igen ud fra de tal, du indtaster. Når det, du har, er to klokkeslæt i stedet for en varighedsstreng (en vagt, der går fra 22:00 til 06:30, for eksempel), giver tidsvarighedsberegneren den forløbne tid, inklusive spænd, der krydser midnat. Begge kører helt i din browser: intet af det, du indtaster, forlader din enhed. Og til hurtig læsning uden noget værktøj dækker to tommelfingerregler de fleste tilfælde: led efter T'et for at vide, om et M betyder måneder eller minutter, og husk, at alt til venstre for T'et er kalenderaritmetik, ikke et fast antal sekunder.

Værktøjer i denne artikel

Ofte stillede spørgsmål

Er PT1M det samme som P1M?

Nej. Bogstavet M skifter betydning afhængigt af T-skilletegnet: P1M er én måned, PT1M er ét minut. Det er den mest almindelige fejllæsning af formatet, og nogle API-fejl er opstået netop af denne grund. Er du i tvivl, så led efter T'et først: alt før det tælles i år, måneder, uger og dage; alt efter det tælles i timer, minutter og sekunder. En korrekt formet varighed har aldrig tidsenheder før T'et eller datoenheder efter det.

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

PT90M og PT1H30M er begge gyldige og beskriver samme mængde tid. ISO 8601 tvinger ikke komponenterne til at holde sig inden for deres konventionelle intervaller, så minutter over 59 eller timer over 23 er fint. Fortolkere accepterer begge stavemåder; hvilken en et system genererer, afhænger af, om det normaliserer. Genererer du varigheder, som mennesker skal læse, er PT1H30M venligere; sammenligner du varigheder i kode, bør du sammenligne deres samlede sekunder i stedet for strengene, netop fordi to forskellige strenge kan betyde det samme.

Hvad er forskellen mellem en varighed og et interval?

En varighed siger, hvor længe, uden en position i kalenderen: P3D er tre dage, med start hvor som helst. Et ISO 8601-interval fastgør en varighed til faktiske datoer, skrevet med en skråstreg: 2026-07-04T00:00:00Z/P3D betyder de tre dage, der starter den 4. juli 2026, og et start/slut-par som 2026-07-04/2026-07-07 udtrykker samme spænd. Der findes også gentagne intervaller med et R-præfiks: R5/2026-07-04T00:00:00Z/P1D betyder fem daglige gentagelser fra det startpunkt. Intervaller løser flertydigheden af kalenderenheder, da P1M forankret til en dato altid har én bestemt længde.

Kilder