Час/числа

Парсер тривалості ISO 8601

Розібрати рядок на кшталт "P3Y6M4DT12H30M5S" у зрозумілий вигляд або скласти такий рядок із років/місяців/днів/годин/хвилин/секунд.


                        

Тривалість у форматі ISO 8601 (наприклад, P3Y6M4DT12H30M5S) — компактний, однозначний спосіб записати проміжок часу, який використовують багато API та форматів даних, але який складно прочитати без розбору. Інструмент перекладає такий рядок людською мовою й дозволяє скласти його з готових полів.

Як користуватися

Типові сценарії

Що варто памʼятати

Літера P на початку означає «period» (період) і є обовʼязковою, так само як T перед часовою частиною, що відділяє дні від годин.

Базовий стандарт не визначає знак для тривалості — від’ємні тривалості (для позначення «тому назад») підтримуються лише окремими реалізаціями як неофіційне розширення.

Стаття про цей інструмент: 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.

Число прописом: навіщо перетворювати цифри на слова

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