что такое 1970 часов
Заблуждения программистов о Unix-времени
Вчера Дэнни поинтересовался любопытными фактами о Unix-времени, а я вспомнил, что иногда оно работает совершенно неинтуитивно.
Вот эти три факта кажутся в высшей степени разумными и логичными, не так ли?
Настольные часы 1770-х годов. Собрано Джоном Леру. Из коллекции Wellcome. Опубликовано под лицензией CC BY
У всех трёх заблуждений одна причина: високосные секунды. Если вы не знакомы с дополнительными секундами, вот краткая справка:
Время UTC определяется двумя факторами:
Когда два времени выпадают из синхрона, в UTC добавляется или удаляется секунда, чтобы вернуть синхронизацию. С 1972 года служба IERS (которая управляет этим делом) добавила 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. Вот как это выглядит, в интервалах по четверти секунды:
Это уже 27 раз произошло на практике. По окончании суток UTC добавляют дополнительную секунду 23:59:60. В сутках Unix одинаковое количество секунд, поэтому он не может добавить дополнительную секунду — вместо этого приходится повторять метки времени Unix для последней секунды. Вот как это выглядит, в интервалах по четверти секунды:
Если стартовать в 23:59:60.50 и подождать полсекунды, время Unix возвращается на полсекунды, а метка времени Unix 101 соответствует двум секундам UTC.
Вероятно, это не единственные странности времени Unix — только то, что я вчера вспомнил.
Android-пользователи «ВКонтакте» пожаловались на пустые сообщения из 1970 года
Пользователи официального приложения «ВКонтакте» для Android сообщают о возвращении пользователя null null и ошибки, приводящей к закрытию мобильного клиента. Всплеск жалоб наблюдается после обновления от 9 февраля 2015 года.
Ошибку вызывает появление пустого сообщения от пользователя null null в диалогах. Попытка открыть его приводит к завершению работы мобильного приложения. Некоторые пользователи социальной сети после экстренного завершения работы отмечают пропажу других диалогов.
Пользователи соцсети предположили вирусное происхождение ошибки, но это уже опроверг руководитель пресс-службы «ВКонтакте» Георгий Лобушкин. «Проблема возникает при обращении к серверу через медленный мобильный интернет. Исправление ошибки затруднено ее редкостью и тем, что ее почти невозможно воспроизвести. Но отдел разработки уже ищет решение», — сказал он.
Представитель соцсети добавил, что впервые столкнулся с такой ошибкой только сейчас. Однако поиск показал, что пользователи мобильной версии официального приложения «ВКонтакте» для Android уже жаловались на похожие симптомы осенью 2014 года. В конце января 2015-го об аналогичном поведении сообщили бета-тестировщики неофициального мобильного клиента Candy. В некоторых случаях сообщение от null null появлялось после удаления диалогов.
Ник null null является именем пользователя «по умолчанию», когда не введены ни имя, ни фамилия, а 1 января 1970 года — это дата, от которой ведется исчисление так называемого UNIX-времени, иногда также называется «компьютерным временем».