Wszystkie artykuły

ISO 8601 Duration: jak zapisać czas trwania w standardowym formacie

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.

Wypróbuj narzędzie