Инструменты разработчика · Конвертер временных меток Unix
Микросекундные и наносекундные эпохи: сокращение цифровых значений 16 и 19.
· Как это работает
временные метки Unix-время рабочий процесс разработчика
Некоторые среды выполнения выдают эпохи в микросекундах или наносекундах, давая шестнадцати- или девятнадцатизначные значения, которые преобразователь секунд или миллисекунд не может прочитать напрямую. В этом посте объясняется, откуда они берутся и как их безопасно сократить.
Девятнадцатизначное число в трассировке — вывод time.UnixNano, вставленный в преобразователь, и результат, который не имел смысла.
Поле трассировки из девятнадцати цифр может представлять собой наносекундную эпоху, но вставка его непосредственно в этот преобразователь не проверяет эту гипотезу. ToolAcre принимает секунды или миллисекунды. Ошибка диапазона даже намекает на то, что слишком большой номер базы данных может использовать микросекунды или наносекунды, заставляя пользователя нормализовать перед интерпретацией.
Сохраняйте исходный текст во время исследования. Преобразование его в обычное число JavaScript уже позволяет изменять младшие цифры еще до того, как произойдет какое-либо деление. Схема производителя, оператор регистрации или определение столбца базы данных являются лучшим доказательством, чем визуальная длина, особенно для счетчиков, которые вообще не относятся к эпохам Unix.
Четыре общих разрешения — секунды, миллисекунды, микросекунды и наносекунды с указанием количества цифр для современных дат.
Секунды сдвигаются раз в секунду, миллисекунды — в тысячу раз быстрее, микросекунды — в миллион раз и наносекунды — в миллиард раз. В настоящее время они часто отображаются в виде десяти, тринадцати, шестнадцати и девятнадцати десятичных цифр. «Часто» имеет значение: отрицательные знаки, ранние даты и отдаленные диапазоны нарушают правило только цифр.
Автоматический порог панели отличает только секунды от миллисекунд при величине 10¹¹. Шестнадцатизначное значение микросекунды превышает эту границу и будет рассматриваться как миллисекунды, обычно превышающие предполагаемую дату в тысячу раз. Выбирайте объект только после уменьшения неподдерживаемого разрешения до одного из названий маршрутов.
Обычно используются четыре метки разрешения, но количество цифр само по себе не является контрактом формата.
В схеме названо несколько языковых API и продуктов хранения данных, но ни один из них не является исходным файлом для этого инструмента. Вместо того чтобы предполагать, какой производитель создал поле, изучите его документацию. Суффикс, такой как `_us` или `_ns`, объявленная точность или известное соседнее событие, служат доказательством того, что десятичная ширина не может.
Также отличают эпоху от монотонной продолжительности. Счетчик высокого разрешения может измерять время с момента запуска или загрузки процесса и не имеет никакого отношения к 1970. В результате деления такого значения получается счетчик меньшего размера, а не календарная дата. Подтвердите как единицу измерения, так и начало координат, прежде чем передавать результат в преобразователь эпох.
Укажите разрешение производителя, а не список предполагаемых эмитентов.
Чтобы уменьшить микросекунды до миллисекунд, удалите коэффициент 1,000; на наносекунды удалите 1,000,000. Целочисленное деление намеренно не учитывает точность до доли миллисекунды. Для положительного значения усечение берет на себя лидирующее количество миллисекунд. Для отрицательных значений выберите правило округления, соответствующее производителю, а не предполагающее, что нарезка строк имеет идентичную семантику.
Выполняйте операцию с десятичным текстом или BigInt, если точность имеет значение. Деление с плавающей запятой может начинаться с уже округленного девятнадцатизначного числа. Сохраняйте отброшенный остаток рядом с преобразованным моментом, если для расследования требуется порядок событий в пределах одной миллисекунды; ToolAcre не может отображать эти различия в доли миллисекунды.
Рабочий пример: 1700000000123456789 — обрезка до миллисекунд, чтение результата и запись отложенных вами субмиллисекундных цифр.
Возьмите `1738577696123456789` в наносекундах. Обработайте его как десятичный текст, разделите на 1,000,000 с помощью целочисленной арифметики и получите 1,738,577,696,123 миллисекунд с остатком 456,789 наносекунд. Введите миллисекундный коэффициент явно; его значение ISO равно `2025-02-03T10:14:56.123Z`.
Остальное не является шумом: два события трассировки могут иметь общую отображаемую миллисекунду, но различаться ниже нее. Сохраняйте необработанные значения для заказа и используйте уменьшенные выходные данные только для ознакомления. Округление до 1,738,577,696,124 переместит отображаемый момент на следующую миллисекунду и исказит источник.
Деление строк можно просматривать по цифрам: шесть удаленных десятичных знаков точно соответствуют шкале от наносекунды до миллисекунды, а нетронутый префикс остается календарным счетчиком.
Рабочий пример: сохранить 19-значное значение в виде текста, уменьшив его до миллисекунд.
Гарантия точного целого числа JavaScript заканчивается значительно ниже типичных девятнадцатизначных значений эпохи. Парсер ToolAcre в конечном итоге вызывает `Number`, поэтому подача необработанного наносекундного текста через панель не может сохранить каждую цифру. Поддерживаемые ограничение даты и выбор единиц измерения не превращают число в наносекундный целочисленный контейнер.
Используйте BigInt или путь предварительной обработки с учетом строк для сокращения, а затем передайте результат безопасного размера в миллисекундах. Такая последовательность имеет значение: первый анализ и деление второго могут повредить именно те цифры, которые вы надеялись сохранить. Успешный рендеринг календаря не доказывает, что исходное значение младшего порядка сохранилось.
Чего это не касается, так это точности часов, которая не связана с разрешением: наносекундная метка времени все равно может ошибаться на несколько секунд.
Разрешение показывает, насколько точно представление может различать значения; оно не говорит вам, насколько близко часы были к физическому времени. Наносекундное поле может быть получено из неточного источника, тогда как секундное поле может быть хорошо синхронизировано. Преобразователь не имеет возможности измерения тактового качества и не делает таких заявлений.
Аналогичным образом, дополнительные цифры могут быть дополнены точностью, а не измеренной точностью. Для анализа инцидентов сравните часы, используя свидетельства синхронизации, и сравните порядок событий, используя необработанный документированный счетчик. Преобразование календаря обеспечивает только читаемость. Не делайте вывод о точности по длинному десятичному хвосту или по трем миллисекундам, показанным в ISO.
Вывод: сначала сократите до миллисекунд, затем преобразуйте — и как конвертер временных меток Unix считывает сокращенное значение с указанной единицей измерения
Уменьшите неподдерживаемое разрешение перед преобразованием, сохраните оригинал и укажите отброшенный остаток. Затем ToolAcre может сделать то, что обещает его контракт: прочитать полученные секунды или миллисекунды и показать UTC, локальную и ISO формы с видимой выбранной единицей измерения.
Если нормализованная дата по-прежнему не имеет смысла, вернитесь к началу, а не повторно удаляйте цифры. Счетчик с момента загрузки, другая эпоха или недокументированная кодировка могут оставаться неверными в любом масштабе. Единица измерения, происхождение и целочисленная точность — это отдельные вопросы; ответьте на все три, прежде чем доверять удобочитаемой дате.
Явный селектор единиц измерения важен после сокращения, поскольку автоматическое обнаружение используется только по умолчанию. Выбор миллисекунд записывает решение предварительной обработки вместо того, чтобы запрашивать эвристику величины для его повторного обнаружения.