Инструменты разработчика · Конвертер временных меток Unix
Отрицательные временные метки Unix: как представляются даты до 1970
· Как это работает
временные метки Unix-время форматы данных
Время Unix отсчитывается вперед от 1970, но оно также отсчитывается и в обратном направлении. В этом посте объясняется, что означает отрицательная эпоха, как −1 становится последней секундой 1969 и где системы, предполагающие положительные значения, выходят из строя.
Дата рождения со знаком минус — пользователь, родившийся в 1965, хранится в виде отрицательного целого числа, а код обрабатывает это как ошибку.
Запись о человеке, родившемся до 1970, может законно содержать отрицательную временную метку Unix. Отказ от каждого знака минус превращает выбор представления в ошибку с потерей данных. Парсер ToolAcre принимает необязательный знак, а `fromEpoch` помечает интерпретированное значение в миллисекундах ниже нуля как `beforeEpoch`, а не считает его недействительным.
Затем на дисплее появляется примечание, объясняющее, что данный момент предшествует эпохе Unix. Это эффективнее, чем простое отображение даты, потому что необычный знак остается видимым для рецензента. Если восходящая схема запрещает отрицательные значения, сбой относится к этой схеме или миграции, а не к арифметике, которая отображает значения по обе стороны от нуля.
Целые числа со знаком и эпоха — почему time_t подписано и чему соответствуют −1 и −86400
Ноль — это 1970-01-01T00:00:00.000Z. Тесты репозитория доказывают, что −1 секунда — это непосредственно предшествующий момент, `1969-12-31T23:59:59.000Z`. Аналогично, −86,400 секунд — это один фиксированный POSIX день до нуля. Знаковая арифметика делает ось непрерывной, а не требует второй эпохи для более старых записей.
Схема приписывает подписанное хранилище `time_t`, но этот код не устанавливает историю разработки или тип, используемый каждой платформой. Его более узкого доказательства достаточно: числа JavaScript могут быть отрицательными, обнаружение использует абсолютную величину, а Date может форматировать результат. Опишите объявленный тип производящего поля отдельно от принимаемых входных данных преобразователя.
Подписанная арифметика эпохи вокруг нуля, без объяснения того, почему каждый раз time_t выбирал свой тип.
Отрицательные значения сохраняют то же различие единиц измерения, что и положительные. `−1000` секунд указывает на 1,000 секунд до начала эпохи, тогда как `−1000` миллисекунд указывает только на одну секунду до нее. Автоматическое обнаружение обрабатывает оба значения как секунды, поскольку их величина ниже 10¹¹, поэтому короткий подсчет миллисекунд перед эпохой требует явного выбора миллисекунд.
Это конкретный провал фольклора по цифрам. Разработчик, видя знак минус и четыре цифры, не может по внешнему виду определить единицу измерения. Используйте исходный контракт, выберите селектор и проверьте примечание к единице. Правило величины ToolAcre используется по умолчанию для типичных данных, а не заменяет метаданные исторических значений, близких к 1970.
Там, где отрицательные значения не работают — системы, которые используют −1 в качестве контрольного, неподписанного хранилища, средства выбора даты, которые ограничивают, и языки, которые их отвергают.
Вне преобразователя `−1` иногда зарезервирован как сигнализатор пропущенных значений, а столбец без знака не может сохранить ни одного отрицательного момента. Это общие возможности проектирования, но репозиторий не может подтвердить, как ведет себя конкретная база данных, средство выбора даты или язык. Проверьте фактическую границу, прежде чем перемещать через нее архивные даты.
Полезный зонд содержит три значения: ноль или задокументированный отсутствующий маркер −1 и явно более старую дату. Если −1 исчезает, а старое значение сохраняется, подразумевается обработка дозорного; если все отрицательные результаты неверны, проверьте тип и проверку. Не «исправляйте» симптом, добавляя 1970 лет или принимая абсолютное значение, поскольку и то, и другое создает разные мгновения.
Рабочий пример: преобразование −14182940 — арифметики в июльскую дату 1969 в UTC и в локальной зоне к западу от Гринвича.
В течение −14,182,940 секунд начните с эпохи и двигайтесь назад на 164, пройдя 86,400-секундные дни, оставив 13,340 секунд. Остаток составляет 3 часов, 42 минут и 20 секунд. Результирующее значение UTC — `1969-07-20T20:17:40.000Z`, момент, выбранный здесь специально для этой статьи.
Местное показание к западу от UTC может показывать более ранний час настенных часов или даже другую дату, но его точный результат зависит от зоны браузера и международных правил. Прочитайте это на панели, а не публикуйте универсальный ответ. Фиксированной проверкой является строка ISO; локальная строка представляет собой экологическую аннотацию по тому же отрицательному счету.
Рабочий пример: преобразование −14,182,940 с проверяемой арифметикой UTC.
ToolAcre сверяет свое интерпретированное значение с ±8.64×10¹⁵ миллисекунд, диапазоном дат, указанным в источнике. Это также доказывает преобразование −2,208,988,800 секунд в `1900-01-01T00:00:00.000Z`. Эти факты показывают, что маршрут простирается задолго до 1970, но это не означает, что каждая система хранения может поддерживать один и тот же диапазон.
Поле 32-бит со знаком имеет более узкий математический интервал, чем JavaScript Дата, но преобразователь не проверяет ширину поля при вставке числа. Сохраните тип источника в аудите. Успешное преобразование браузера демонстрирует репрезентативность здесь, а не безопасное обращение через прошивку, столбцы SQL или двоичные протоколы где-либо еще.
Диапазон дат конвертера известен; внешние 32-битные ограничения зависят от типа их хранилища
Преобразование числа в дату JavaScript не восстанавливает гражданский календарь, фактически напечатанный в каждом месте много веков назад. Реализация использует модель даты платформы и возвращает представление ISO; он не содержит селектора исторического календаря, языкового архива или документального источника по календарным реформам. Эти претензии намеренно отсутствуют.
Для современных записей программного обеспечения представление пролептической машины все еще может быть именно тем контрактом, который вам нужен. Для генеалогии, истории права или архивной транскрипции сохраняйте исходную письменную дату и ее календарный контекст вместе с любой производной эпохой. Удобное сортируемое число не должно стирать неопределенность, которую не может устранить преобразование.
Заявления о календарной истории выходят за рамки доказательств этого преобразователя.
Отрицательное значение — это направление на оси эпохи, а не категория ошибки. ToolAcre анализирует его, применяет те же правила секунд или миллисекунд по величине и помечает результат, как и до эпохи. Такое поведение позволяет проверяющему отличить законный старый момент от контрольного или неподписанного сбоя хранилища в другом месте.
При аудите данных до 1970 укажите единицу измерения, тип источника и соглашение о пропущенных значениях, прежде чем интерпретировать знак. Затем сравните результат ISO с известной записью. Только знак является значимой арифметикой; окружающая схема определяет, намеревался ли производитель выполнить эту арифметику или использовал то же число в качестве контрольного значения.