Standard ISO 8601 definiuje nie tylko format dat, ale też format zapisu czasu trwania — ciąg znaków taki jak PT1H30M, który jednoznacznie i w sposób czytelny dla maszyny opisuje „1 godzinę 30 minut".
Struktura formatu
Zapis zawsze zaczyna się od litery P (period). Składniki daty (lata, miesiące, dni) następują zaraz po P, a składniki czasu (godziny, minuty, sekundy) po literze T, która oddziela część daty od części czasu. Na przykład P2DT4H oznacza „2 dni i 4 godziny".
Po co potrzebna jest litera T
Bez separatora T litera M byłaby niejednoznaczna — oznacza zarówno miesiące (w części daty), jak i minuty (w części czasu). Dlatego P1M oznacza „1 miesiąc", a PT1M — „1 minutę".
Kiedy baza danych rozumie ISO 8601 bezpośrednio
Typ interval w PostgreSQL akceptuje jako poprawne dane wejściowe ciągi znaków w formacie ISO 8601 duration, oprócz własnej, bardziej swobodnej składni w stylu „2 days 4 hours". Oznacza to, że można napisać wprost INTERVAL 'P2DT4H' w zapytaniu SQL, a baza zinterpretuje to bez konieczności wcześniejszej konwersji w aplikacji.
Do czego to się przydaje
- Odczytanie długości filmu lub wydarzenia z odpowiedzi zewnętrznego API.
- Wygenerowanie poprawnego ciągu znaków ISO 8601 duration dla własnego API lub kanału danych.
- Konwersja czasu trwania między formatem czytelnym dla człowieka a maszynowym zapisem ISO.
Sekundy ułamkowe w zapisie
Standard ISO 8601 dopuszcza część ułamkową tylko w ostatnim (najmniejszym) składniku ciągu — na przykład PT1.5S oznacza „1,5 sekundy", a PT1H30.5M oznacza „1 godzinę 30,5 minuty". Część ułamkowa w jakimkolwiek innym składniku niż ostatni nie jest przewidziana przez standard.