Все статьи

ISO 8601 Duration: как записать длительность в стандартном формате

Стандарт ISO 8601 определяет не только формат дат, но и формат записи длительностей времени — строку вроде PT1H30M, которая однозначно и машиночитаемо описывает «1 час 30 минут».

Структура формата

Запись всегда начинается с буквы P (period). Компоненты даты (годы, месяцы, дни) идут сразу после P, а компоненты времени (часы, минуты, секунды) — после буквы T, которая отделяет дату от времени. Например, P2DT4H означает «2 дня и 4 часа».

Зачем нужна буква T

Без разделителя T буква M была бы неоднозначной — она обозначает и месяцы (в части даты), и минуты (в части времени). Поэтому P1M означает «1 месяц», а PT1M — «1 минута».

Где эта запись встречается в реальном коде

В Java и Kotlin стандартные методы Duration.parse() и Period.parse() из пакета java.time принимают строку ISO 8601 duration напрямую — без сторонних библиотек. Это делает формат удобным как «формат обмена» между backend на Java/Kotlin и любым внешним API, который отдаёт длительность в виде такой строки.

Зачем это нужно

  • Расшифровать длительность видео или события из ответа стороннего API.
  • Сформировать корректную ISO 8601 duration строку для собственного API или фида данных.
  • Конвертировать длительность между человекочитаемым форматом и машинной ISO-записью.

Дробные секунды в записи

Стандарт ISO 8601 допускает дробную часть только в последнем (младшем) компоненте строки — например, PT1.5S означает «1.5 секунды», а PT1H30.5M — «1 час 30.5 минуты». Дробная часть в любом другом компоненте, кроме последнего, стандартом не предусмотрена.

Попробовать инструмент