Исходный код Calendar.TimeZoneDatabase поведение
Этот модуль определяет поведение для предоставления данных о часовых поясах.
IANA предоставляет данные о часовых поясах, включающие данные о различных смещениях UTC и стандартных смещениях для часовых поясов.
Краткое описание
Типы
- time_zone_period()
Период, в течение которого действует определённая комбинация смещения UTC, стандартного смещения и аббревиатуры часового пояса.
- time_zone_period_limit()
Предел, когда начинается или заканчивается определённый период часового пояса.
Обработчики
- time_zone_period_from_utc_iso_days(iso_days, time_zone)
Период часового пояса для определённого момента времени в UTC для конкретного часового пояса.
- time_zone_periods_from_wall_datetime(naive_datetime, time_zone)
Возможные периоды часового пояса для определённого часового пояса и даты и времени по местному времени.
Типы
time_zone_period()Исходный код
@type time_zone_period() :: %{
optional(any()) => any(),
utc_offset: Calendar.utc_offset(),
std_offset: Calendar.std_offset(),
zone_abbr: Calendar.zone_abbr()
} Период, в течение которого действует определённая комбинация смещения UTC, стандартного смещения и аббревиатуры часового пояса.
Например, один период может быть летом 2018 года в Europe/London часовом поясе, когда действует летнее время/перевод часов и длится с весны до осени. Осенью std_offset меняется вместе с zone_abbr, поэтому для зимы нужен другой период.
time_zone_period_limit()Исходный код
@type time_zone_period_limit() :: Calendar.naive_datetime()
Предел, когда начинается или заканчивается определённый период часового пояса.
Начало включительно. Окончание исключающее. Например, если период от 2015-03-29 01:00:00 до 2015-10-25 01:00:00, период включает начало 2015-03-29 01:00:00 и длится до момента перед 2015-10-25 01:00:00.
Начало или конец некоторых периодов бесконечны, например, для последних периодов для часовых поясов без DST или планов изменения. Однако для целей этого поведения они используются только для пробелов во времени по местному времени, где требуемые ограничения периодов заданы в определённое время.
Обработчики
time_zone_period_from_utc_iso_days(iso_days, time_zone)Исходный код
@callback time_zone_period_from_utc_iso_days(Calendar.iso_days(), Calendar.time_zone()) ::
{:ok, time_zone_period()}
| {:error, :time_zone_not_found | :utc_only_time_zone_database} Период часового пояса для определённого момента времени в UTC для конкретного часового пояса.
Принимает имя часового пояса и точку во времени для UTC и возвращает time_zone_period для этой точки во времени.
time_zone_periods_from_wall_datetime(naive_datetime, time_zone)Исходный код
@callback time_zone_periods_from_wall_datetime(
Calendar.naive_datetime(),
Calendar.time_zone()
) ::
{:ok, time_zone_period()}
| {:ambiguous, time_zone_period(), time_zone_period()}
| {:gap, {time_zone_period(), time_zone_period_limit()},
{time_zone_period(), time_zone_period_limit()}}
| {:error, :time_zone_not_found | :utc_only_time_zone_database} Возможные периоды часового пояса для определённого часового пояса и даты и времени по местному времени.
Если предоставленная дата и время по местному времени неоднозначна, верните кортеж со значением :ambiguous и двумя возможными периодами. Периоды в кортеже должны быть отсортированы, причём первый элемент должен быть тем, который начинается раньше.
Если предоставленная дата и время по местному времени находится в разрыве, например, во время «перевода часов» при переходе от зимнего времени к летнему, верните кортеж со значением :gap и двумя периодами с ограничениями в вложенном кортеже. Первый вложенный кортеж из двух элементов — это период до разрыва и значение по местному времени, которое указывает, когда заканчивается период (по местному времени). Второй вложенный кортеж из двух элементов — это период сразу после разрыва и значение по местному времени для начала периода сразу после разрыва.
Если для предоставленного datetime существует только один возможный период, верните кортеж со значением :ok и time_zone_period.
© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.18.1/Calendar.TimeZoneDatabase.html