Источник 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, когда действует летнее/почтовое время (daylight saving time) и оно длится с весны до осени. Осенью 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.17.2/Calendar.TimeZoneDatabase.html