Инструменты разработчика · Конвертер временных меток Unix
Секунды или миллисекунды? Отличие 10-значной эпохи от 13-значной эпохи
· Как это работает
временные метки Unix-время рабочий процесс разработчика
Большинство значений эпохи, которые вы встречаете сегодня, состоят либо из десяти цифр (секунд), либо из тринадцати цифр (миллисекунд), и если вы угадаете неправильно, дата будет отодвинута на десятки тысяч лет. В этом посте объясняется арифметика подсчета цифр и почему конвертер должен указывать единицу измерения, а не выводить ее.
1700000000 или 1700000000000? — одно и то же мгновение, написанное двумя способами, и приборная панель, показывающая дату в далеком будущем.
Значение журнала 1700000000 и значение полезной нагрузки 1700000000000 могут описывать один и тот же момент. Считайте первое значение миллисекундами, и ваша информационная панель попадет в январь 1970; относитесь ко второму как к секундам, и его дата переносится на тысячи лет в будущее. Метка времени — это просто счетчик плюс единица измерения и начальная точка, поэтому столбец базы данных с именем созданный_at без документации не содержит важной информации.
Почему текущий счетчик секунд состоит из десяти цифр — миллиардная секунда в 2001, десятизначный диапазон до 2286, и что означают девять цифр
Время Unix отсчитывает секунды, прошедшие с 1970-01-01 00:00:00 UTC в соответствии с обычным соглашением POSIX. Счетчик перевалил за миллиард в 2001; для современных положительных дат это обычно десять десятичных цифр. Оно остается десятизначным, пока не достигнет десяти миллиардов в 2286. Это свойство десятичной записи, а не правило, встроенное в строку даты ISO. Отрицательные значения до эпохи и даты далеко за пределами настоящего делают недействительным простой ярлык для подсчета цифр.
Почему в миллисекундах тринадцать — тысячный коэффициент, три дополнительные цифры и откуда взялись соглашения JavaScript и Java
JavaScript Date.getTime() обычно считает миллисекунды, умножая временную метку секунды на 1,000. Три нуля превращают текущий десятизначный счет секунд в тринадцатизначный счет миллисекунд. Например, 1,700,000,000 секунд становится 1,700,000,000,000 миллисекунд; оба 2023-11-14T22:13:20.000Z. Преобразователь, который просто вставляет разделители без указания предполагаемой единицы измерения, может превратить действительное число в правдоподобную, но неправильную дату.
Где угадывание идет не так — небольшие значения рядом с эпохой, даты до 2001 и будущие даты, когда количество цифр перестает различать.
Эвристика не работает вблизи 1970, когда значение миллисекунды может быть коротким, перед 2001, когда секунды имеют менее десяти цифр, или со счетчиками микросекунд и наносекунд. ToolAcre по умолчанию интерпретирует величины ниже 10¹¹ как секунды, а большие значения — как миллисекунды и обозначает используемую единицу измерения. Этот порог является практическим предположением, а не однозначным декодером формата. Временная метка, предоставленная конкретным API, должна интерпретироваться с использованием документации этого API, даже если ее длина необычна.
Рабочий пример: три значения из одного журнала — 1700000000, 1700000000000 и 1700000000000000, считываются в секундах, миллисекундах и микросекундах.
Три целых числа из наглядного журнала показывают ловушку. Интерпретируйте 1700000000 как секунды, а 1700000000000 как миллисекунды: оба преобразуются в 2023-11-14T22:13:20Z. Интерпретируйте 1700000000000000 как микросекунды и разделите на один миллион, чтобы получить то же количество секунд. Конвертер ToolAcre принимает секунды или миллисекунды, а не микросекунды: вставка этого третьего числа без предварительного преобразования его единиц не подтвердит предполагаемый момент. Во время отладки всегда держите необработанное поле и его единицу измерения вместе.
Почему следует указывать единицу, а не гадать — как конвертер показывает примененную единицу, чтобы неправильное предположение было видно, а не молчало
Служба, отправляющая метки времени, должна называть устройство в своей схеме или использовать текст ISO 8601 с явным смещением. Если устаревшее поле недокументировано, перед принятием решения сравните несколько значений с другим надежным временем события; одна случайно правдоподобная дата не является достаточным доказательством. Конвертер отображает, какую единицу измерения он применил, давая вам шанс обнаружить ошибку с коэффициентом 1,000. Измените единицу измерения явно и сравните, а не полагайтесь на автоматическое предположение в качестве долгосрочного API контракта.
Чего это не касается — временные метки, хранящиеся в виде строк, ISO 8601 текстовых или серийных дат электронных таблиц, что представляет собой разные проблемы.
В этой статье не описываются серийные даты Excel, такие строки, как 2026-09-28T10:15Z, а также форматирование часовых поясов для показаний местных часов. Это разные представления. Временные метки Unix относятся к моменту; одно и то же мгновение отображается как разное время на настенных часах в разных зонах. Соглашения о дополнительных секундах также заслуживают отдельного рассмотрения, а 32-битный счетчик со знаком имеет проблему переполнения в 2038, которая отличается от вопроса о секундах и миллисекундах.
Вывод: посчитайте цифры, затем подтвердите единицу измерения — и как конвертер временных меток Unix считывает секунды и миллисекунды с обозначением единицы измерения.
Подсчитайте цифры в качестве начальной подсказки, затем подтвердите заявленную производителем единицу измерения и хотя бы одно известное событие. Конвертер временных меток Unix делает видимым примененное предположение о секундах/milliseconds и печатает как UTC, так и локальные представления в вашем браузере. Не позволяйте аккуратно выглядящей дате перекрывать противоречащую документации из системы, создавшей значение.