Инструменты разработчика · Конвертер временных меток Unix
Не каждая эпоха соответствует 1970: NTP, Windows FILETIME, GPS и даты Excel
· Фон
временные метки форматы данных отладка
Происхождение Unix 1970 — лишь одно из многих. В этом посте рассматриваются эпохи, которые вы встретите в файлах и протоколах (1900, 1601, 1904, 1980, 2001), и показано, как распознать значение, которое вообще никогда не было временем Unix.
Временная метка, которая попала в 1900 — значение из сетевого захвата, которое никакое устройство не может сделать разумным.
Число, полученное при перехвате пакета, может давать ерунду как в секундах, так и в миллисекундах, поскольку единица измерения — не единственный скрытый параметр. Эпоха означает выбранную нулевую точку; Unix использует 1970, тогда как другой протокол может считаться откуда-то еще. Изменение масштаба не может исправить неправильное начало координат.
Если оба показания ToolAcre конфликтуют с известным временем события, прекратите переключение. Укажите имя поля, производителя, версию протокола и документированное происхождение. Постоянное сокращение цифр до тех пор, пока не появится правдоподобный год, превращает расследование в совпадение.
Тот же диагноз применяется, когда появляется разумная дата, но она противоречит окружающим событиям. Правдоподобие — слабая проверка; происхождение и известное эталонное событие являются более сильными.
NTP и 1900 — секунды с момента 1900-01-01 с долей 32 бит и ролловером 2036, который он вызывает
В рабочей книге указано происхождение NTP, дробный формат и дата перехода. Ни один из них не реализован и не протестирован в конвертере Unix, поэтому данная статья не подтверждает эти особенности. Сетевой захват должен быть декодирован в соответствии с документацией протокола, используемой отправителем и анализатором.
Только после получения секунд Unix значение должно вводиться в этот инструмент. Сохраняйте контекст эпохи или перехода, поскольку одно поле фиксированной ширины может не идентифицировать его отдельно. Отполированный результат UTC предполагаемой эпохи может быть внутренне последовательным и внешне неверным.
Поля протокола также могут разделять целые и дробные компоненты. Объединение или десятичное преобразование их без указанного масштаба создает новое число, которое не предназначалось ни для одного совместимого декодера.
Для получения подробной информации о преобразовании NTP и поведения опрокидывания требуется исходная документация, которой здесь нет.
Аналогично, именованные счетчики Windows и .NET не являются допустимыми режимами. Репозиторий не содержит констант для их происхождения или тиковых масштабов. Их большие десятичные значения могут превышать точный диапазон целых чисел JavaScript, прежде чем разработчик попытается преобразовать.
Используйте целочисленную библиотеку, основанную на документированном определении платформы, сохраните оригинал как текст или целое число, а затем выдайте значение Unix. Не вычитайте запомненное смещение в формате с плавающей запятой. Точность на нижнем уровне имеет значение, когда разрешение источника меньше миллисекунд.
Тест туда и обратно должен включать значение с ненулевыми цифрами долей секунды. Фикстуры целой секунды не могут определить, правильно ли сохранился остаток 100-наносекунды или миллисекунды.
Определения FILETIME и .NET не реализуются ToolAcre и не утверждаются из памяти.
Даты в электронной таблице представляют другое представление: числовой серийный номер, интерпретируемый настройками системы дат книги. Для причуды книги 1900 и более старых утверждений Mac требуются источники электронных таблиц, и они здесь не установлены. ToolAcre не читает метаданные книги.
Проверьте файл с помощью инструментов, поддерживающих работу с электронными таблицами, определите настроенную систему дат и сохраните точность до дробных дней, используя эту библиотеку. Обработка серийного номера как секунд Unix может привести к появлению ранней даты 1970, которая выглядит как обычная ошибка масштабирования, в то время как фактическая проблема заключается в происхождении и единице измерения вместе.
Параметры книги могут перемещаться вместе с файлом, поэтому два визуально похожих серийных номера могут иметь разное происхождение. Преобразование относится к границе документа, где доступны эти метаданные.
Серийные системы и особенности электронных таблиц требуют доказательств, специфичных для электронных таблиц.
GPS и эпохи, связанные с Apple, указанные в схеме, также находятся за пределами реализации. Их отношения могут включать в себя соглашения о масштабах, выходящие за рамки постоянного смещения происхождения. Никакая текущая формула компенсации или преобразования здесь не публикуется без авторитетных доказательств.
Общая диагностика по-прежнему передается: определите ноль, продолжительность тика и соглашение о скачке от производителя. Затем преобразуйте с помощью соответствующей библиотеки и сверьте с известной меткой времени из того же набора данных. Три независимых факта безопаснее, чем предположение десятичной дроби.
Эта осторожность особенно важна в отношении соглашений о скачках. Константа, которая работает для одного масштаба и даты, не может быть вневременной связью между каждой парой систем.
Для отношений GPS и эпох Apple требуются авторитетные источники за пределами этого модуля.
Защищенный рабочий метод начинается с известного момента, например, проверенного `2025-02-03T10:23:00.000Z` ToolAcre, равного 1,738,578,180 секунд Unix. Для другой задокументированной эпохи вычислите ее значение, используя официальное происхождение этой системы, и масштабируйте его с помощью целочисленной арифметики, а затем преобразуйте его обратно, используя то же определение.
Сравните обратный путь со строкой Unix ISO и сохраните результат. Эта статья намеренно не заполняет таблицу из пяти эпох константами, которые не были прочитаны. Этот метод учитывает все предположения и может быть проверен на соответствие протоколу или формату файла, фактически создавшему данные.
Рабочий метод: получить одно мгновение для задокументированных эпох вместо публикации непроверенных констант.
ToolAcre не распознает и не конвертирует автоматически чужие эпохи. В его меню единиц измерения указаны секунды и миллисекунды, как согласно определению Unix в конфигурации. Автоматическое обнаружение выбирает только между этими масштабами при величине 10¹¹; он никогда не меняет нулевую точку.
Этот узкий контракт предотвращает ложную уверенность. Если иностранное число попадает в правдоподобную дату Unix, преобразователь не может предупредить, что происхождение неверно. Происхождение должно стоять перед арифметикой. Документируйте преобразование в коде, а не полагайтесь на ручную книгу вручную.
Видимая автоматическая метка сообщает только о секундах или миллисекундах. Его никогда не следует использовать в качестве доказательства того, что произошло обнаружение источника, поскольку в исходном коде такой ветви не существует.
Вывод: знайте, от какого нуля вы отсчитываете, и как конвертер временных меток Unix прямо сообщает вам, что он читает секунды или миллисекунды Unix.
Знайте, от какого нуля вы ведете отсчет, насколько велик один такт и как источник обрабатывает свою временную шкалу. Конвертер Unix отвечает только после того, как эти вопросы разрешатся в секундах или миллисекундах с 1970 UTC. Он не может вывести семантику из одного целого числа.
Используйте неправдоподобные двойные показания как сигнал к исследованию происхождения, а не как разрешение продолжать пробовать делители. Как только преобразование источника создает значение Unix, ToolAcre обеспечивает полезную независимую UTC и локальную проверку работоспособности, сохраняя при этом свое собственное предположение видимым.
Хороший адаптер называет внешний тип, выполняет одно преобразование источника и выдает фирменное значение Unix. Такая конструкция предотвращает утечку необработанных счетчиков в общие конструкторы дат.