Время/числа

Парсер длительности ISO 8601

Разобрать строку вида "P3Y6M4DT12H30M5S" в понятный вид или собрать такую строку из лет/месяцев/дней/часов/минут/секунд.


                        

An ISO 8601 duration (e.g. P3Y6M4DT12H30M5S) is a compact, unambiguous way to write a time span, used by many APIs and data formats, but hard to read without parsing it. This tool translates such a string into plain language and lets you build one from separate fields.

How to use it

Common uses

Things to keep in mind

The leading P stands for "period" and is required, just like the T that separates days from hours in the time part.

The base standard doesn't define a sign for durations — negative durations (to mean "ago") are only supported by specific implementations as an unofficial extension.

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

Часто задаваемые вопросы

Что означает строка вроде P3Y6M4DT12H30M5S?

Это стандартный формат ISO 8601 для продолжительности: P означает "period", далее идут годы/месяцы/дни до буквы T, после которой — часы/минуты/секунды. В примере это 3 года, 6 месяцев, 4 дня, 12 часов, 30 минут и 5 секунд.

Чем ISO-продолжительность отличается от простой продолжительности в часах?

В отличие от фиксированных единиц (как в калькуляторе продолжительности), компоненты "годы" и "месяцы" здесь календарные и не имеют постоянного количества секунд — их точная длина зависит от конкретных дат применения.

Поддерживается ли недельный формат P4W?

Да, но только при разборе готовой строки. Для составления собственной строки недели нужно выразить в днях, поскольку ISO 8601 не позволяет сочетать недели с другими компонентами в одной строке.

Можно ли указать дробные секунды или минуты?

Да, стандарт допускает дробную часть только в последнем компоненте строки — например, PT1.5S (1.5 секунды) или PT1H30.5M (1 час 30.5 минуты) корректны, а дробная часть в любом нефинальном компоненте — нет.

Бывают ли отрицательные ISO-длительности?

Базовый стандарт ISO 8601 не определяет знак для длительности, но некоторые реализации (в том числе этот инструмент) поддерживают ведущий минус для обозначения «назад» или обратной длительности — это распространённое, хотя и неофициальное расширение.

Статьи: Время/числа

Unix-время: почему компьютеры считают время с 1970 года

Почему именно 1 января 1970 года стало точкой отсчёта времени для большинства компьютерных систем.

Cron-выражения: как расшифровать расписание запуска задач

Как расшифровать выражение вроде */15 * * * * и понять, когда именно запустится задача.

Системы счисления: зачем нужны двоичная, восьмеричная и шестнадцатеричная

Почему цвет #FF5733 в CSS записан шестнадцатеричными цифрами, а не десятичными.

Побитовые операции: как AND, OR и XOR работают на уровне битов

Чем побитовый AND отличается от логического, и зачем вообще оперировать отдельными битами числа.

Разница между датами: почему подсчёт дней сложнее, чем кажется

Почему наивное вычитание дат может дать неправильный результат из-за високосных годов.

Расчёт возраста: почему это не простое вычитание годов

Почему простое вычитание годов рождения может дать возраст на единицу больше реального.

Часовые пояса: почему UTC — это не то же самое, что GMT

Почему UTC не меняется дважды в год, а время в Лондоне (GMT/BST) — меняется.

Расчёт длительности: как правильно суммировать часы, минуты и секунды

Почему при сложении минут и секунд нужно «переносить» остаток в следующий разряд, как при десятичном сложении.

Номер недели: почему в разных странах недели считают по-разному

Почему 1 января иногда относится к 52-й или 53-й неделе предыдущего года по стандарту ISO 8601.

Римские цифры: как устроена система без нуля и разрядов

Почему IV означает 4, а не 6, и как правило вычитания работает в римских цифрах.

IEEE 754: почему 0.1 + 0.2 не равно 0.3 в коде

Почему почти в каждом языке программирования 0.1 + 0.2 выводит 0.30000000000000004.

Число прописью: зачем превращать цифры в слова

Почему в банковских документах сумму пишут и цифрами, и словами одновременно.