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