Я знаю, что временная метка Unix определяется как количество секунд, прошедших с 1970-01-01 00:00:00Z
. Однако я не мог найти ясного источника, который дает это определение. Я также читал различные заявления о взаимосвязи между UTC и отметкой времени Unix в отношении секунд прыжка.
Эта страница википедии содержит список всех секунд прыжка. Первый
1972-06-30 23:59:60
Заявления о временных отметках Unix
Что касается "всех современных компьютерных систем", время Unix совершенно не знает ни о чем, кроме секунд.
Источник: HackerNews, брази
UNIX - это временные треки UTC вместо TAI, что означает, что он "исправляет" для секунд прыжка. В результате UNIX-время не "количество секунд с эпохи", а "86400 * (количество целых дней с эпохи) + (количество секунд с полуночи)", а время UNIX будет идти вперед (никогда до сих пор) и назад на секундах прыжка (вторая будет повторяться в большинстве реализаций, так как день идет от 23:59:60 до 00:00:00, так как у них одинаковая метка времени).
Источник: Hacker News, масклинн
Я также читал (но я не могу найти его снова - где-то на переполнении стека), что временные метки Unix предполагают, что каждый день имеет ровно 24 * 60 * 60 секунд. Плакат подразумевал, что дни все еще сохраняются синхронно, в то время как секунды прыжка просто "замедляют" реальную секунду. Следовательно, "временная отметка времени unix" может не быть секундой SI.
Возможные ответы
Я вижу три возможных ответа:
A1: Временные метки Unix отслеживают SI секунд с 1970-01-01 00: 00: 00Z. Это означает, что они 27 секунд от UTC.
A2: Временные метки Unix отслеживают "пройденные секунды в TAI". Это означает, что библиотека, которая преобразует временные метки Unix в UTC, должна иметь дело со скачкообразными секундами.
A3: Временные метки Unix отслеживают "пройденные секунды в UTC". Это означает, что разница между двумя временными метками Unix 1 может быть 1 SI-секундой в большинстве случаев, но не во всех.
Пожалуйста, добавьте источник в свой ответ.
питон
Кажется, что Python datetime
не знает о секундах прыжка (?).
>>> import datetime
>>> a = datetime.datetime(1972, 6, 30, 23, 59, 59)
>>> b = datetime.datetime(1972, 7, 1, 0, 0, 0)
>>> b-a
datetime.timedelta(0, 1)
и модуль time
похоже, отображает фактический прыжок второй на секунду раньше:
>>> import time
>>> t3 = time.mktime((1972, 6, 30, 23, 59, 59, -1, -1, -1))
>>> t4 = time.mktime((1972, 7, 1, 0, 0, 0, -1, -1, -1))
>>> t4 - t3
1.0
>>> t4 = time.mktime((1972, 6, 30, 23, 59, 60, -1, -1, -1))
>>> t4 - t3
1.0
Это впечатление поддерживается issue23574.