Русский

Инструменты разработчика · Конвертер временных меток Unix

Почему время в Unix начинается 1 января 1970: краткая история эпохи

· Фон

временные метки Unix-время форматы данных

Временная шкала, исходящая из нулевой точки эпохи Unix.
Оригинальная векторная иллюстрация ToolAcre

1 января 1970 ничего не произошло; дата была выбрана для удобства после того, как исходные часы Unix угрожали переполниться. В этом посте рассказывается история первых часов Unix, перехода на секунды и того, как это соглашение распространилось повсюду.

Дата, которую никто не празднует — почему 1970 продолжает появляться в ошибках, настройках по умолчанию и на информационных панелях полвека спустя

Январь 1970 появляется всякий раз, когда программное обеспечение ошибочно принимает небольшую длительность или секунды за миллисекунды. Это не резервный день рождения, созданный ToolAcre; это нулевая точка, от которой интерпретировался ввод. Тест нулевой эпохи возвращает `1970-01-01T00:00:00.000Z` и четверг.

Поэтому видеть эту дату – диагностическое значение. Значение, близкое к нулю, отсутствующее поле, приведённое к нулю, или несоответствие масштаба могут оказаться рядом. Зафиксируйте необработанное значение, прежде чем обвинять форматирование. Вывод календаря показывает полученную арифметику.

Таблица заметных эпох ToolAcre дает нулю преднамеренную метку, подтверждая, что 1970 является определенной ссылкой, а не страницей ошибки, выбранной браузером.

Первые часы Unix — отсчитывающие шестидесятые доли секунды от начала 1971 и заканчивающие 32-битную комнату менее чем за три года

В рабочей тетради содержался подробный отчет о ранних часах, отсчитывающих шестидесятые от 1971. Ни один из обязательных источников репозитория не документирует эту историю. Повторение его по памяти нарушило бы авторский контракт, даже если внешняя история могла бы позже поддержать это.

Что можно продемонстрировать, так это текущую ось: ноль в эпоху, положительные секунды после нее и отрицательные секунды до нее. Этого механизма достаточно для использования преобразователя и диагностического программного обеспечения. В будущую историческую статью следует добавлять проверенные первичные или научные источники, а не рассматривать код как свидетельство совещаний по проектированию.

Репозиторий не является исходным кодом первой конструкции часов Unix, поэтому историческая реконструкция не утверждается.

ToolAcre называет свою входную временную метку Unix и определяет ее в рекомендациях по ошибкам как секунды или миллисекунды с момента 1970-01-01 UTC. Источник не объясняет, почему был выбран именно этот год, имела ли значение округлость или какой горизонт хотели дизайнеры. Эти мотивы остаются опущенными.

Арифметика действительно объясняет непреходящую полезность фиксированного начала координат: вычитание дает пройденное расстояние, моменты порядка сравнения, а знак указывает, с какой стороны от нуля находится значение. Выбор нуля условен; согласованность между производителями и потребителями – вот что делает цифры совместимыми.

Это различие разделяет условности и последствия. Программное обеспечение может с уверенностью зависеть от последствий, в то время как историки продолжают оценивать доказательства происхождения конвенции.

Реализованное определение использует 1970; мотивы его выбора требуют исторических источников, которых здесь нет.

Тесты моделируют каждый день, как это делает преобразование POSIX, и явно переходят от `2016-12-31T23:59:59Z` к `2017-01-01T00:00:00Z`. Это исполняемое свидетельство поведения этого инструмента. Это не ссылка на формулировку или полный объем какого-либо внешнего стандарта.

Держите требования стандартов отдельно от тестов реализации. Тест показывает, что делает релиз в рамках своих настроек; документ о стандартах определяет, что должны делать соответствующие системы. Здесь практический контракт достаточно ясен, чтобы предсказать результат, не придумывая историю формализации.

Тест также не позволяет будущему рефакторингу незаметно вставить в выходные данные специальную метку перехода. Наблюдаемая совместимость охраняется без преувеличения того, почему существует это соглашение.

ToolAcre тестирует модель в стиле POSIX, но не служит ссылкой на стандарты.

JavaScript Дата представляет количество эпох в миллисекундах, а ToolAcre принимает секунды Unix и преобразует их путем умножения на 1,000. Маршрут также возвращает обе формы. Эта граница объясняет, почему веб-приложения часто отображают один и тот же момент с тремя дополнительными десятичными нулями.

Репозиторий не может установить хронологию, согласно которой базы данных, библиотеки C и другие экосистемы приняли представления эпох. Вместо того, чтобы рассказывать о развороте без исходных данных, он показывает текущую совместимость и маркирует используемые единицы измерения. Это действенное доказательство для разработчиков, работающих сегодня.

Эта сдержанность позволяет избежать знакомого провала содержания: последовательности правдоподобных вех, повторяющихся без цитат до тех пор, пока последующие читатели не примут накопленное повторение за документальные доказательства.

Данные репозитория показывают миллисекундное представление JavaScript, а не полную историю распространения.

Фиксированная эпоха не содержит локальной зоны. ToolAcre форматирует результирующую дату в UTC и отдельно в локальной зоне браузера. Отрицательные значения простираются до нуля, как показывает тест −1. Эти последствия следуют непосредственно из числовой оси и уровня форматирования.

Реализация также имеет диапазон дат ±8.64×10¹⁵ миллисекунд. Это предел избранного представления, а не предел, присущий абстрактной идее эпохи. Всегда определяйте, чей диапазон и единица измерения обсуждаются, прежде чем делать обобщения на основе результатов конвертера.

Локальный форматтер может применить дату до или после границы UTC в зависимости от смещения. Это не перемещает ноль; он меняет только проекцию человеческого календаря.

Чего это не касается — эпохи других систем, таких как 1900, 1601 и 1980, которые имеют свою собственную историю.

Другие системы могут выбрать другой ноль и другую шкалу, поэтому большое целое число может оставаться бессмысленным в обоих модулях ToolAcre. В этой статье не рассказывается история происхождения 1900, 1601 или 1980. Вместо этого статья 340 фокусируется на выявлении этого несоответствия и получении конверсий на основе документированных определений.

Если происхождение неизвестно, сравните его с исходной документацией, а не постоянно сдвигайте нули. Конвертер Unix намеренно предполагает 1970; он не может автоматически идентифицировать чужую эпоху по одному номеру. Сохранение начала координат рядом с единицей предотвращает превращение успешного арифметического результата в семантическую ошибку.

Происхождение других эпох сравнивается отдельно, не утверждая здесь их историю.

Надежный урок носит механический характер: ноль Unix отображается в начале 1970 UTC, знаки простираются вокруг него, а секунды становятся JavaScript миллисекундами перед форматированием даты. ToolAcre делает каждый из этих фактов наблюдаемым с помощью значений 0, −1 и таблицы известных эпох.

Причины, по которым люди выбрали это соглашение, относятся к истории, а не к выводам из современного кода. Соблюдение этой границы приводит к более короткому, но более правдивому изложению. Используйте конвертер для арифметики; используйте соответствующий исторический материал, прежде чем объяснять мотивы или вехи.

Дисциплина доказывания является частью технической точности. Точное упущение сообщает сопровождающим, какие именно новые источники требуются, прежде чем исторический отчет сможет ответственно расшириться.