Архитектура Luxon опирается на строго разделённые сущности времени и
набора вспомогательных механизмов, которые обеспечивают локализацию,
работу с часовыми поясами, форматирование и конфигурацию глобального
поведения. Эти компоненты формируют слой поддержки над базовыми
структурами DateTime, Duration и
Interval, расширяя их функциональность без нарушения
иммутабельности основных объектов.
Одним из ключевых вспомогательных типов выступает система зон
времени. В Luxon она представлена базовым интерфейсом Zone
и несколькими реализациями, каждая из которых отвечает за свой сценарий
интерпретации времени.
Основные особенности:
Europe/Berlin,
Asia/Almaty) — наиболее распространённый тип, использующий
базу tz databaseВнутренне Zone отвечает за три критических операции:
Это делает Zone не просто идентификатором, а полноценной стратегией интерпретации временной шкалы.
Объект Duration в Luxon представляет собой не точку на временной оси, а величину интервала, выраженную в единицах времени.
Ключевая особенность заключается в том, что Duration хранит данные в нормализованной форме:
Каждая единица может быть задана независимо, что делает Duration полиморфным контейнером временной величины.
Вспомогательные типы, связанные с Duration:
DurationLikeObject — входная структура для создания
DurationDurationUnits — допустимые ключи единиц измеренияNormalizedDuration — внутренне приведённая формаDuration поддерживает операции:
Особенность заключается в том, что месяцы и годы считаются календарными единицами, а не фиксированными интервалами, что требует учета контекста календаря и зоны.
Interval представляет собой промежуток между двумя моментами времени
(DateTime), формируя логическую временную область.
Структурно Interval зависит от:
start)end)Вспомогательные типы Interval:
IntervalLikeObject — объектная форма создания
интервалаIntervalEndpoint — допустимые значения границ (DateTime
или null)IntersectionResult — результат операций
пересеченияInterval поддерживает операции:
overlaps)union)intersection)Особое значение имеет иммутабельность: любые операции возвращают новый Interval без изменения исходного.
Класс Info представляет собой набор статических методов, предоставляющих доступ к метаданным локализации и календаря.
Основные категории данных:
Типы, связанные с Info:
WeekdayNumbers — числовое представление дней
неделиLocaleOptions — параметры локализации выводаCalendarSystem — идентификаторы календарей (gregory,
iso8601 и др.)Info не хранит состояния и не создаёт объектов времени, выступая исключительно как справочник.
Settings управляет глобальными параметрами работы библиотеки. В
отличие от локальных объектов DateTime, изменения здесь
влияют на поведение всей системы.
Основные параметры:
defaultLocale — язык и регион по умолчаниюdefaultZone — часовой пояс, используемый при отсутствии
явного указанияdefaultOutputCalendar — календарная системаthrowOnInvalid — стратегия обработки ошибокВспомогательные типы Settings:
SettingsObject — структура конфигурацииZoneLike — обобщённый тип для задания зоны (строка,
Zone, смещение)LocaleString — формат локалиОсобенность Settings заключается в том, что он является глобальным синглтоном, что делает его поведение критически важным для предсказуемости форматирования и парсинга.
Для упрощения API Luxon использует унифицированные типы входных
значений. Одним из ключевых является ZoneLike.
Он позволяет задавать часовой пояс в нескольких формах:
-120, +180)Такой подход снижает когнитивную нагрузку при создании объектов времени и позволяет гибко интегрировать Luxon в различные среды выполнения.
Хотя основной объект времени — DateTime, библиотека поддерживает расширенные входные формы:
DateTimeLikeObject — объект с частичными полями
датыDateObjectUnits — набор допустимых полей (year, month,
day, hour и т.д.)ToObjectOutput — результат преобразования DateTime в
структуруЭти типы используются при:
Форматирование в Luxon опирается на набор вспомогательных параметров, которые управляют поведением вывода строк.
Ключевые категории:
ToFormatOptions — параметры метода
toFormatToISOOptions — конфигурация ISO-сериализацииToHTTPOptions — форматирование для HTTP-заголовковКаждый набор опций определяет:
Эти типы позволяют отделить логику хранения времени от его представления.
Локализация в Luxon строится на наборе вспомогательных структур, которые определяют культурное поведение форматов.
Основные элементы:
LocaleOptions — параметры вывода строкNumberingSystem — система нумерации (latn, arab,
etc.)OutputCalendar — календарная системаЭти типы влияют на:
Luxon использует внутренние типы для унификации входных данных и предотвращения неоднозначности.
Среди них:
NormalizedObject — стандартизированное представление
даты или длительностиExplanationFlags — служебные флаги интерпретацииInvalidExplanation — структура ошибок парсингаЭти типы редко используются напрямую, но критичны для:
Все перечисленные типы образуют связную систему, где:
*Like типы обеспечивают гибкость
входных данныхТакая архитектура обеспечивает изоляцию ответственности и предотвращает смешивание логики хранения, вычисления и отображения времени.