Вспомогательные типы

Архитектура Luxon опирается на строго разделённые сущности времени и набора вспомогательных механизмов, которые обеспечивают локализацию, работу с часовыми поясами, форматирование и конфигурацию глобального поведения. Эти компоненты формируют слой поддержки над базовыми структурами DateTime, Duration и Interval, расширяя их функциональность без нарушения иммутабельности основных объектов.


Zone: абстракция часового пояса

Одним из ключевых вспомогательных типов выступает система зон времени. В Luxon она представлена базовым интерфейсом Zone и несколькими реализациями, каждая из которых отвечает за свой сценарий интерпретации времени.

Основные особенности:

  • IANA-зоны (Europe/Berlin, Asia/Almaty) — наиболее распространённый тип, использующий базу tz database
  • FixedOffsetZone — фиксированный сдвиг от UTC без учета перехода на летнее время
  • SystemZone — зона, наследующая настройки окружения выполнения
  • InvalidZone — специальный тип, сигнализирующий об ошибке интерпретации

Внутренне Zone отвечает за три критических операции:

  • преобразование локального времени в UTC
  • обратное преобразование UTC в локальное представление
  • вычисление смещения в конкретный момент времени

Это делает Zone не просто идентификатором, а полноценной стратегией интерпретации временной шкалы.


Duration: структурированное представление временных промежутков

Объект Duration в Luxon представляет собой не точку на временной оси, а величину интервала, выраженную в единицах времени.

Ключевая особенность заключается в том, что Duration хранит данные в нормализованной форме:

  • миллисекунды
  • секунды
  • минуты
  • часы
  • дни
  • месяцы
  • годы

Каждая единица может быть задана независимо, что делает Duration полиморфным контейнером временной величины.

Вспомогательные типы, связанные с Duration:

  • DurationLikeObject — входная структура для создания Duration
  • DurationUnits — допустимые ключи единиц измерения
  • NormalizedDuration — внутренне приведённая форма

Duration поддерживает операции:

  • арифметическое сложение и вычитание
  • нормализацию (например, 90 минут → 1 час 30 минут)
  • преобразование в миллисекунды и обратно

Особенность заключается в том, что месяцы и годы считаются календарными единицами, а не фиксированными интервалами, что требует учета контекста календаря и зоны.


Interval: работа с диапазонами времени

Interval представляет собой промежуток между двумя моментами времени (DateTime), формируя логическую временную область.

Структурно Interval зависит от:

  • начальной точки (start)
  • конечной точки (end)
  • правил пересечения и включения границ

Вспомогательные типы Interval:

  • IntervalLikeObject — объектная форма создания интервала
  • IntervalEndpoint — допустимые значения границ (DateTime или null)
  • IntersectionResult — результат операций пересечения

Interval поддерживает операции:

  • проверка пересечения (overlaps)
  • объединение (union)
  • пересечение (intersection)
  • проверка включения точки или другого интервала

Особое значение имеет иммутабельность: любые операции возвращают новый Interval без изменения исходного.


Info: статический слой метаданных

Класс Info представляет собой набор статических методов, предоставляющих доступ к метаданным локализации и календаря.

Основные категории данных:

  • названия месяцев
  • названия дней недели
  • списки доступных зон времени
  • информация о локали
  • поддерживаемые календарные системы

Типы, связанные с Info:

  • WeekdayNumbers — числовое представление дней недели
  • LocaleOptions — параметры локализации вывода
  • CalendarSystem — идентификаторы календарей (gregory, iso8601 и др.)

Info не хранит состояния и не создаёт объектов времени, выступая исключительно как справочник.


Settings: глобальная конфигурация поведения

Settings управляет глобальными параметрами работы библиотеки. В отличие от локальных объектов DateTime, изменения здесь влияют на поведение всей системы.

Основные параметры:

  • defaultLocale — язык и регион по умолчанию
  • defaultZone — часовой пояс, используемый при отсутствии явного указания
  • defaultOutputCalendar — календарная система
  • throwOnInvalid — стратегия обработки ошибок

Вспомогательные типы Settings:

  • SettingsObject — структура конфигурации
  • ZoneLike — обобщённый тип для задания зоны (строка, Zone, смещение)
  • LocaleString — формат локали

Особенность Settings заключается в том, что он является глобальным синглтоном, что делает его поведение критически важным для предсказуемости форматирования и парсинга.


ZoneLike и унификация входных типов

Для упрощения API Luxon использует унифицированные типы входных значений. Одним из ключевых является ZoneLike.

Он позволяет задавать часовой пояс в нескольких формах:

  • строка IANA-зоны
  • числовое смещение (-120, +180)
  • объект Zone
  • системная зона

Такой подход снижает когнитивную нагрузку при создании объектов времени и позволяет гибко интегрировать Luxon в различные среды выполнения.


Temporal input types: DateTime-like структуры

Хотя основной объект времени — DateTime, библиотека поддерживает расширенные входные формы:

  • DateTimeLikeObject — объект с частичными полями даты
  • DateObjectUnits — набор допустимых полей (year, month, day, hour и т.д.)
  • ToObjectOutput — результат преобразования DateTime в структуру

Эти типы используются при:

  • создании DateTime из частичных данных
  • клонировании объектов с модификациями
  • сериализации в JSON-подобные структуры

Форматирующие вспомогательные типы

Форматирование в Luxon опирается на набор вспомогательных параметров, которые управляют поведением вывода строк.

Ключевые категории:

  • ToFormatOptions — параметры метода toFormat
  • ToISOOptions — конфигурация ISO-сериализации
  • ToHTTPOptions — форматирование для HTTP-заголовков

Каждый набор опций определяет:

  • включение или исключение миллисекунд
  • формат смещения зоны
  • точность временных значений
  • стиль календарного представления

Эти типы позволяют отделить логику хранения времени от его представления.


Locale и культурные параметры

Локализация в Luxon строится на наборе вспомогательных структур, которые определяют культурное поведение форматов.

Основные элементы:

  • LocaleOptions — параметры вывода строк
  • NumberingSystem — система нумерации (latn, arab, etc.)
  • OutputCalendar — календарная система

Эти типы влияют на:

  • отображение дат
  • порядок компонентов времени
  • формат чисел и разделителей

Внутренние служебные типы и нормализация данных

Luxon использует внутренние типы для унификации входных данных и предотвращения неоднозначности.

Среди них:

  • NormalizedObject — стандартизированное представление даты или длительности
  • ExplanationFlags — служебные флаги интерпретации
  • InvalidExplanation — структура ошибок парсинга

Эти типы редко используются напрямую, но критичны для:

  • диагностики ошибок
  • отладки временных преобразований
  • согласованности вычислений

Взаимодействие вспомогательных типов

Все перечисленные типы образуют связную систему, где:

  • Zone определяет контекст интерпретации времени
  • Settings задаёт глобальные правила
  • Info предоставляет справочные данные
  • Duration и Interval формируют временные структуры
  • вспомогательные *Like типы обеспечивают гибкость входных данных
  • форматирующие опции контролируют представление результата

Такая архитектура обеспечивает изоляцию ответственности и предотвращает смешивание логики хранения, вычисления и отображения времени.