Кратко

  • RFC 9636 стандартизует представление TZif, но не источник и не свежесть гражданских правил внутри конкретного файла.
  • Legacy-блок, 64-битная таблица, границы усечения, footer и срок leap-таблицы ограничивают доказательную силу результата.
  • Полная квитанция связывает намерение, зону, источник и выпуск, hash, диапазон, reader, политику неоднозначности, вычисленное время и действие системы.

Файл не ошибся. Он закончился.

Последний переход перевёл локальное время в -00, footer был пуст, а приложение продолжило использовать прежнее смещение. Оно скрыло правильный ответ «неизвестно» собственной политикой и назвало результат данными зоны.

RFC 9636 описывает, как не терять эту границу. Документ Standards Track заменяет RFC 8536, сохраняет совместимость и добавляет версию 4. Он не определяет источник собранных правил. База часовых поясов IANA — возможный источник, но сигнатура файла не доказывает ни IANA, ни номер выпуска.

Усечение ограничивает область утверждения

Переходы отсортированы и выбирают локальный тип со смещением от UT, флагом летнего времени и обозначением. Тип действует до следующего перехода. После последнего правила продолжает только непустой footer; иначе локальное время не задано.

TZDIST может специально сократить историю. В начале файла нулевой тип служит неопределённым состоянием до первой границы. В конце -00 и пустой footer отказываются утверждать будущее. Такой объект валиден внутри своего интервала, а не для всех дат.

Проверка должна сопоставлять запрошенный instant с диапазоном. Любая подстановка вне него — последний offset, зона хоста, UTC — является политикой приложения. Ей нужны владелец, версия, срок и отдельное предупреждение.

Один файл содержит две модели совместимости

Сначала всегда идут header и data block версии 1. Их 32-битные времена охватывают примерно 1901–2038 годы. Версии 2 и выше добавляют 64-битную таблицу и footer, оставляя старый блок для устаревших читателей.

Старый блок может быть placeholder. Тогда reader версии 1 видит отсутствие переходов и сокращений, а современный reader использует вторую часть. Факт успешного разбора одинаковых bytes не доказывает одинакового результата.

Сохраняйте версию формата и библиотеки, выбранный блок, проверки размеров и индексов, hash объекта, источник и release. Для дат после 2038 отдельно доказывайте, что не сработал legacy-путь.

Footer продолжает формулу, а не право

Footer может содержать POSIX-правило для времени после последнего сохранённого перехода. На стыке оно обязано совпасть с таблицей. Это внутренняя непрерывность, не обещание будущего законодательства.

После нового гражданского решения источник выпускает обновление. Для будущего события продукт должен выбрать: сохранить instant, сохранить wall time или запросить подтверждение. Если зона и release уже удалены, а событие сведено к UTC, исходное намерение восстановить нельзя.

Аббревиатура тоже не выбирает территорию. CST неоднозначно, а одинаковые сегодня offset могут разойтись завтра. Идентификатор зоны и путь его выбора необходимо хранить отдельно.

Версия 4 обозначает срок знания

Версия 4 позволяет усечь начало записей leap seconds и использовать последнюю запись как expiration. После неё таблица не говорит, будет ли очередная коррекция.

Reader может отказаться считать либо продолжить, игнорируя expiration и, возможно, выдав ошибку. Оба режима нельзя сводить к одному «успешно». Нужны отдельные статусы для результата в пределах таблицы и результата после её срока.

Резолюция 4 27-й CGPM касается будущего leap seconds. Она не доказывает, какую таблицу установила машина и какую ветвь выполнил код. Институциональное решение, пакет данных и running code — разные слои.

TLS не подтверждает свежесть смысла

TZif не содержит собственной защиты целостности или конфиденциальности. Счётчики массивов требуют проверки длины и границ. Публичная доставка должна быть защищена внешним слоем вроде TLS, иначе изменённые правила повредят календарям.

TLS подтверждает канал к endpoint, но не правильность выбранного release, свежесть ETag, обновление cache и дальнейшую неизменность файла. Квитанция поставки включает источник, выпуск, URL, ETag, время, hash, возраст cache и установку.

Запрос зоны способен раскрыть прошлое, настоящее или будущее местоположение. Публичность правил не делает публичной историю выбора пользователя.

От отображения к событию

RFC 3339 кодирует instant и offset, RFC 9557 может добавить имя зоны, RFC 5545 описывает календарь. Но они не обязаны включать точный TZif, release и решение для повторённого или отсутствующего wall time.

Таблица показывает структуру неоднозначности. Приложение выбирает ранний или поздний instant, сдвиг, отказ либо вопрос человеку. Затем нужен следующий receipt: действительно ли задание, окно или встреча начались.

Цепочка отделяет гражданское намерение, выбор зоны, источник, artefact, reader, результат, решение приложения и эффект. RFC 9636 владеет значением bytes, но не местом, будущим законом и выполнением.

Источники