Инструменты разработчика · Конвертер временных меток Unix
Часовые пояса не являются смещениями: база данных IANA tz и почему это важно
· Фон
временные метки часовые пояса API-интерфейс браузера
Смещение — это число; Часовой пояс — это история чисел и правил их изменения. В этом посте объясняется разница, представлена база данных IANA tz, которая его кодирует, и показано, почему преобразователи полагаются на нее для локального чтения.
Встреча, сдвинутая на час – сохраненное смещение +02:00, которое было правильным в июле и неправильным в декабре.
Фиксированный файл `+02:00`, сохраненный рядом с июльским собранием, может быть верным показанием на данный момент, но, как правило, в декабре он все равно не сработает. Смещение — это один результат; зона — это контекст правила, способный выдавать результаты в разные даты. Сохранение одного из них так, как если бы это был другой, моментальный снимок замораживается.
Локальная строка ToolAcre запрашивает Intl форматировать каждую дату и запрашивает короткое числовое смещение. Он не добавляет константу конфигурации к эпохе. Такая конструкция позволяет применимому правилу окружающей среды влиять на каждый момент отдельно.
Смещение от зоны — фиксированное расстояние от UTC относительно именованного региона с правилами DST и историей изменений.
Смещение указывает, насколько далеко отрендеренные часы находятся от UTC в данный момент. Именованный регион может содержать последовательность правил смещения и исторических изменений. Сама эпоха не несет ни того, ни другого. Эти понятия должны занимать отдельные поля, когда приложению требуется как событие, так и расписание с привязкой к месту.
Для неизменяемого события может быть достаточно сохранить момент. Для «открываться в 09:00 в этом регионе каждый день» сохраните именованную зону, поскольку будущие экземпляры должны разрешаться со времени стены. Повторное использование вчерашнего смещения рассматривает динамическое правило как постоянное числовое свойство.
База данных IANA tz — имена Area/City, почему это запись политических решений и как часто она обновляется
В рабочей книге указаны база данных IANA, политическое происхождение и частота обновления. Реализация сообщает имя зоны в стиле IANA из `resolvedOptions()`, но не раскрывает версию базы данных, расписание обновлений или исходный пакет. Эти подробности здесь не приводятся.
Это ограничение влияет на воспроизводство. Если старые выходные данные различаются на разных машинах, запишите строку зоны и версии платформы; не утверждайте, какой набор правил новее, исходя только из часов. Именованная зона улучшает вопрос, но преобразователь не является инспектором данных часовых поясов.
Приложения, которым требуется воспроизводимый исторический результат, должны контролировать зависимость своих зон от данных и проверять репрезентативные даты. Использование неопределенной среды браузера делегирует эту воспроизводимость.
Происхождение правил именованной зоны и частота обновления не раскрываются в этой реализации.
ToolAcre запрашивает у браузера локальную зону и форматирует через Intl. Репозиторий не определяет, пришли ли правила из операционной системы, пакета браузера или другого компонента среды выполнения. Он улавливает сбой и безопасно отступает, не раскрывая внутреннюю архитектуру.
Следовательно, «локальный» означает среду, выбранную браузером во время преобразования. Изменение настроек устройства может изменить вывод без изменения эпохи. Для контрольных журналов сохраните UTC и необработанный счетчик; используйте локальное отображение в качестве контекста, а не канонического хранилища.
Возврат к ISO в случае сбоя форматтера сохраняет момент, но теряет запрошенное локальное представление. Потребители должны воспринимать это как уменьшенный контекст отображения, а не как изменение даты.
Браузер выбирает и форматирует свою локальную зону; источник его правил не утверждается
Выберите два момента UTC с интервалом в шесть месяцев, например `2025-01-15T12:00:00Z` и `2025-07-15T12:00:00Z`, преобразуйте их в секунды и проверьте локальные строки на одном устройстве. Запишите, отличается ли числовое смещение. Наблюдение действительно для отображаемой зоны и окружающей среды.
В книге прописаны смещения Europe/Berlin, но эти правила именованной зоны не были прочитаны из реализации. Это воспроизводимое упражнение позволяет избежать неподдерживаемой таблицы, одновременно обучая тому же различию: один запрос зоны, два мгновенных запроса и, возможно, два результата смещения.
Если смещения совпадают, наблюдение по-прежнему информативно: эта настроенная зона не выявила сезонных различий в выбранные моменты времени в этой среде.
Рабочий пример: наблюдать одну зону браузера в две даты вместо жестко запрограммированных берлинских правил.
Панель запрашивает `timeZoneName: "shortOffset"`, что предпочитает числовые отношения, такие как GMT+1, а не региональное сокращение. Этот выбор снижает зависимость от меток, значение которых может варьироваться в зависимости от контекста, хотя точное форматирование Intl остается выходным сигналом платформы.
Для хранимых данных используйте канонические идентификаторы зон, определенные выбранной библиотекой приложения, а не отображайте сокращения. Краткое обозначение, обращенное к пользователю, может быть полезным, но оно не должно стать ключом к восстановлению будущего расписания.
Числовые смещения остаются однозначными, как арифметические в один момент. Их ограничением является отсутствие идентификации правила, а не невозможность сопоставить показания этих часов обратно с UTC.
В сохраненных данных избегаются сокращения; форматтер запрашивает короткое числовое смещение
Повторяющееся планирование в будущем требует пробелов, дублирования и обработки политик, которых этот преобразователь не обеспечивает. Он начинается с определенной даты или эпохи и отображает ее. Он не выбирает между двумя повторяющимися местными временами и не исправляет несуществующее.
Используйте библиотеку планирования с учетом зон, поведение которой проверяется в соответствии с вашими требованиями, а затем проверьте решенные случаи здесь, если это полезно. Отделение разрешения от дисплея не позволяет простому преобразователю превратиться в планировщик с неопределенной политикой границ.
Затем выходные данные планировщика можно сохранить как эпоху для выполнения, сохраняя при этом зону и исходное намерение времени стены для будущего пересчета или объяснения.
Вывод: храните мгновения как эпохи, сохраняйте места как имена зон — и как конвертер временных меток Unix использует зону вашего браузера для локального чтения.
Сохраняйте мгновения как явные единицы эпохи или канонические строки UTC и сохраняйте именованные зоны, когда само место имеет значение. Смещение может сопровождать вывод для пояснения, но оно не заменяет ни одно из полей. UTC и локальные строки ToolAcre демонстрируют это разделение.
Если локальный результат вас удивляет, проверьте метку зоны, мгновенное значение и смещение перед изменением данных. Патч с фиксированным смещением может сделать одну дату правильной, а другую неправильной. Надежная модель обеспечивает стабильность события и позволяет проверенному правилу зоны использовать циферблат.
Эта модель также поддерживает путешествия: пользователь может просмотреть один сохраненный момент в новой локальной зоне, не переписывая событие и не теряя исходный контекст планирования.