- PVSM.RU - https://www.pvsm.ru -
Приношу извинения Патрику МакКензи [1].
Вчера Дэнни [2] поинтересовался любопытными фактами о Unix-времени, а я вспомнил, что иногда оно работает совершенно неинтуитивно.
Вот эти три факта кажутся в высшей степени разумными и логичными, не так ли?
Всё это неправда.
Но недостаточно просто заявить «Всё это неправда», не объяснив, почему. Объяснения см. ниже. Но если хотите сами подумать, не прокручивайте изображение часов!

Настольные часы 1770-х годов. Собрано Джоном Леру. Из коллекции Wellcome [3]. Опубликовано под лицензией CC BY [4]
У всех трёх заблуждений одна причина: високосные секунды [5]. Если вы не знакомы с дополнительными секундами, вот краткая справка:
Время UTC определяется двумя факторами:
Проблема в том, что эти два числа не всегда совпадают. Вращение Земли не является последовательным — оно постепенно замедляется, поэтому сутки во Всемирном времени становятся длиннее. С другой стороны, атомные часы дьявольски точны и постоянны в течение миллионов лет.
Когда два времени выпадают из синхрона, в UTC добавляется или удаляется секунда, чтобы вернуть синхронизацию. С 1972 года служба IERS [8] (которая управляет этим делом) добавила 27 дополнительных секунд. В результате получилось 27 суток UTC продолжительностью в 86 401 секунду. Теоретически возможно появление суток продолжительностью 86 399 секунд (минус одна). Оба варианта противоречат фундаментальному предположению о Unix-времени.
Время Unix предполагает, что каждый день длится ровно 86 400 секунд (60 × 60 × 24 = 86 400), без всяких дополнительных секунд. Если происходит такой скачок, то время Unix либо перепрыгивает через секунду, либо отсчитывая две секунды за одну. По состоянию на 2019 год в нём отсутствует 27 високосных секунд.
Так что наши заблуждения нужно дополнить следующим образом:
До сих пор на практике секунды никогда не удалялись (и замедление вращения Земли означает, что это маловероятно), но если бы это когда-либо произошло, это означало бы, что день UTC стал на одну секунду короче. В этом случае последняя секунда UTC (23:59:59) отбрасывается.
В каждых сутках Unix одинаковое количество секунд, поэтому последняя Unix-секунда укороченного дня не будет соответствовать никакому времени UTC. Вот как это выглядит, в интервалах по четверти секунды:

Если стартовать в 23:59:58:00 UTC и подождать одну секунду, время Unix продвинется на две секунды UTC, а метка времени Unix 101 никому не назначается.
Это уже 27 раз произошло на практике. По окончании суток UTC добавляют дополнительную секунду 23:59:60. В сутках Unix одинаковое количество секунд, поэтому он не может добавить дополнительную секунду — вместо этого приходится повторять метки времени Unix для последней секунды. Вот как это выглядит, в интервалах по четверти секунды:

Если стартовать в 23:59:60.50 и подождать полсекунды, время Unix возвращается на полсекунды, а метка времени Unix 101 соответствует двум секундам UTC.
Вероятно, это не единственные странности времени Unix — только то, что я вчера вспомнил.
Время — очень странная штука.
Автор: m1rko
Источник [9]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/it-standarty/318168
Ссылки в тексте:
[1] Патрику МакКензи: https://habr.com/ru/post/146901/
[2] Дэнни: https://twitter.com/dannybirchall
[3] коллекции Wellcome: https://wellcomecollection.org/works/t8v9t648
[4] CC BY: https://creativecommons.org/licenses/by/4.0/
[5] високосные секунды: https://en.wikipedia.org/wiki/Leap_second
[6] Международное атомное время: https://en.wikipedia.org/wiki/International_Atomic_Time
[7] Всемирное время: https://en.wikipedia.org/wiki/Universal_Time
[8] IERS: https://en.wikipedia.org/wiki/International_Earth_Rotation_and_Reference_Systems_Service
[9] Источник: https://habr.com/ru/post/452584/?utm_source=habrahabr&utm_medium=rss&utm_campaign=452584
Нажмите здесь для печати.