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