Source 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()Source
@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()Source
@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.
Начало или конец некоторых периодов могут быть бесконечными, например, для самых последних периодов для часовых поясов без летнего времени или планов по изменению. Однако для целей этого поведения они используются только для разрывов во времени по часам, где необходимые пределы периодов находятся в определенное время.
Вызовы обратного вызова
time_zone_period_from_utc_iso_days(iso_days, time_zone)Source
@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)Source
@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} Возможные периоды часового пояса для определенного часового пояса и даты и времени по часам.
Если предоставленное время `naive_datetime` неоднозначно, верните кортеж с :ambiguous и двумя возможными периодами. Периоды в кортеже должны быть отсортированы, причём первый элемент — тот, который начинается раньше.
Если предоставленное время `naive_datetime` попадает в разрыв, например, во время перехода на летнее время, верните кортеж с :gap и двумя периодами с ограничениями в вложенном кортеже. Первый вложенный кортеж — период до разрыва и `naive_datetime` с ограничением для момента окончания периода (время по часам). Второй вложенный кортеж — период сразу после разрыва и `datetime` (время по часам) для начала периода сразу после разрыва.
Если для предоставленного datetime существует только один возможный период, то верните кортеж с :ok и time_zone_period.
© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.16.3/Calendar.TimeZoneDatabase.html