Инструменты разработчика · Конвертер временных меток Unix
Дополнительные секунды и время Unix: почему эпоха делает вид, что их не существует
· Фон
временные метки Unix-время часовые пояса
UTC вставил дополнительные секунды после 1972, но время Unix их просто не учитывает, что означает, что некоторые секунды повторяются дважды. В этом посте объясняется, почему, что такое размазывание и почему всю практику планируется прекратить.
Второй случай произошел дважды — 23:59:60 в одной системе, повторный 23:59:59 в другой и ошибка дублирования ключа в полночь.
ToolAcre не может создать строку ISO, оканчивающуюся на `23:59:60`. Его тест называет границу дополнительной секунды и ожидает, что одно значение эпохи будет отформатировано как `2016-12-31T23:59:59.000Z`, а следующее — как `2017-01-01T00:00:00.000Z`. Между ними нет дополнительной отображаемой секунды.
Этот факт может повлиять на журналы, внешний источник которых использовал другое соглашение, но этот репозиторий не содержит свидетельств инцидентов с повторяющимися ключами. Если в системе появляются повторяющиеся метки, проверьте эти часы и путь хранения, а не приписывайте их автоматически преобразователю.
Поэтому системе, требующей уникальной метки для каждой физической секунды, требуется больше контекста, чем это сопоставление Unix-to-Date. Конвертер не может изготовить этикетку, которая отсутствует в его модели.
ToolAcre не представляет представимого 23:59:60; он не документирует инциденты с дублированием ключей
В схеме объяснялось атомное время, вращение Земли и порог допуска. Эти научные утверждения и заявления о стандартах не подтверждаются кодом временной метки или тестами. Они намеренно опущены, а не перефразированы по памяти. Механизм здесь не доказывает причины глобальной политики хронометража.
Для использования этого маршрута необходимые доказательства проще: выходные данные Date и ISO предоставляют обычные вторые метки, а эпоха в стиле POSIX продвигается через тестируемую границу. Для управления с использованием дополнительных источников потребуются авторитетные материалы, выходящие за пределы разрешенных путей к репозиториям.
Эта граница скорее явная, чем уклончивая: тесты программного обеспечения отвечают на вопросы представления, в то время как научная история нуждается в материале, написанном для этой цели и рассмотренном на ее собственных условиях.
Физическое обоснование високосных секунд требует источников за пределами этого репозитория.
Реализованная модель ведет себя так, как будто гражданские дни на своей оси имеют 86,400 пронумерованные Unix-секунды. Последовательные целочисленные входные данные отличаются на одну секунду, в том числе в течение 2016 года. `fromEpoch` умножает каждое на 1,000, а Date форматирует полученное количество миллисекунд.
Вызов этого «игнорирования» дополнительных секунд описывает наблюдаемый результат: никакое уникальное значение Unix не сопоставляется с меткой `:60`. Это не означает, что во время реальной вставки все машинные часы идут одинаково. Конвертер принимает счет; он не осуществляет выборку и не регулирует тактовую частоту хоста.
Арифметика в больших диапазонах следует тому же соглашению, поэтому вычитание двух значений Unix измеряет разницу их счетчиков в стиле POSIX, а не восстанавливает пропущенные метки перехода.
Протестированное преобразование не имеет метки дополнительной секунды между последовательными значениями эпохи.
Системы могут применять этапы, повторы или размытия, но хранилище не определяет, какие поставщики используют какой метод, в каком интервале или по какой формуле. Публикация этих подробностей без прямых доказательств создала бы опасную с оперативной точки зрения точность. Таким образом, эта статья не дает никаких обещаний по поводу часов для конкретной платформы.
Если события вблизи границы скачка имеют значение, сохраните документацию по часам источника и необработанные значения. Две системы с разной обработкой могут не согласиться даже после того, как оба значения отформатированы как UTC. Само по себе преобразование не может согласовать их поведение при выборке или восстановить пропущенное различие масштабов.
Выбор среды выполнения также может повлиять на кратковременный порядок событий. Сохраняйте монотонные счетчики или данные последовательности, специфичные для источника, когда это различие имеет значение для эксплуатации.
Поведение тактовой частоты и размытия зависит от платформы и здесь не проверено.
Введите 1,483,228,799 секунд: проверенный результат ISO — `2016-12-31T23:59:59.000Z`. Увеличьте введенное значение один раз до 1,483,228,800: результат будет `2017-01-01T00:00:00.000Z`. Вычитание целых чисел дает единицу, соответствующую отображаемой прогрессии в этой модели.
Локальные строки могут отображать разные даты или смещения в зависимости от браузера, но они происходят из одних и тех же моментов. Используйте строки ISO для проверки границ. Изменение локальной зоны не связано с наличием метки дополнительной секунды.
Эта пара является полезным регрессионным тестом, поскольку строки ISO не зависят от локали. Он напрямую блокирует поведение преобразователя на соответствующем фронте.
Рабочий пример: проверенная граница 2016 хранилища.
В рабочей книге указано разрешение 2022 и будущий срок. Никакие стандарты или источники политики не являются частью свидетельства реализации, поэтому здесь не указываются ни дата, ни прогноз. Политика хронометража может измениться и заслуживает актуальной авторитетной ссылки на момент публикации.
Исключение этого утверждения не ослабляет руководство по программному обеспечению. Существующие данные по-прежнему нуждаются в документировании их масштаба, единиц измерения и источника синхронизации. Текущее поведение преобразователя остается поддающимся проверке независимо от решений о будущей практике гражданского времени.
Специалисты по обслуживанию могут добавить контекст политики позже, напрямую ссылаясь на резолюцию. До тех пор исключение крайнего срока будет более точным, чем публикация неподдерживаемой гарантии на будущее.
Будущие политические резолюции опускаются без авторитетного источника.
TAI, GPS и другие шкалы могут представлять время по-разному, но ToolAcre не предлагает для них селектора или таблицы смещения. Вставка такого счетчика в секундах Unix просто применяет интерпретацию стиля 1970 POSIX. Читаемый результат все равно может быть семантически неверным.
Преобразуйте другие шкалы с помощью источника, который определяет их происхождение и взаимосвязь в соответствующий момент, а затем проверьте полученное значение Unix. Не добавляйте запоминаемую константу: отношения, включающие историю скачков, — это именно то место, где неиспользованная арифметика становится хрупкой.
Отсутствие режима видно по трем параметрам пользовательского интерфейса. Ничто не меняет шкалу времени; автоматический просто выбирает между двумя разрешениями Unix.
Другие шкалы времени находятся за пределами реализации этого конвертера Unix.
Для этого преобразователя проверенное правило — это прямой шаг от 23:59:59 к 00:00:00 на тестируемой границе. Эта модель поддерживает обычную арифметику эпох и объясняет, почему выходные данные `:60` не появляются. Он не подтверждает, как вели себя часы операционной системы при прохождении реальной границы.
Когда важна точность управления прыжком, конверсия является последним шагом презентации, а не источником доказательств. Сначала соберите документацию в масштабе часов, поведение синхронизации и необработанные поля событий. Затем ToolAcre может показать, что означает объявленное количество Unix в его тестируемой модели.
Для обычных бревен вдали от границ прыжка этот нюанс редко меняет отображение. Однако вблизи чувствительных границ присвоение имени модели предотвращает ложные заявления о физической точности.