Календарь поведение
Этот модуль определяет обязанности по работе с календарями, датами, временем и датами и временем в Elixir.
В настоящее время он определяет типы и минимальную реализацию поведения календаря в Elixir. Цель функций календаря в Elixir — предоставить базу для межплатформенной совместимости вместо полной функциональной API даты и времени.
Для фактических структур даты, времени и даты и времени см. Date, Time, NaiveDateTime и DateTime.
Обратите внимание, что обозначения года, месяца, дня и т. д. избыточны (т. е. целое число вместо 1..12 для месяцев), потому что разные календари могут иметь разное количество дней в месяце, месяцев в году и так далее.
Краткое описание
Типы
- calendar()
-
Реализация календаря
- date()
-
Любой map/struct, содержащий поля даты
- datetime()
-
Любой map/struct, содержащий поля даты и времени
- day()
- day_fraction()
-
Внутренний формат времени используется при преобразовании между календарями
- hour()
- iso_days()
-
Внутренний формат даты, используемый при преобразовании между календарями
- microsecond()
-
Микросекунды с сохраненной точностью
- minute()
- month()
- naive_datetime()
-
Любой map/struct, содержащий поля naive_datetime
- second()
- std_offset()
-
Стандартное смещение часового пояса во секундах (не ноль в летнее время)
- time()
-
Любой map/struct, содержащий поля времени
- time_zone()
-
Идентификатор часового пояса в соответствии с базой данных IANA tz (например, Europe/Zurich)
- utc_offset()
-
Смещение часового пояса UTC в секундах
- year()
- zone_abbr()
-
Аббревиатура часового пояса (например, CET или CEST или BST и т. д.)
Функции
- compatible_calendars?(calendar, calendar)
-
Возвращает
true, если у двух календарей одинаковый момент начала нового дня,false, в противном случае - truncate(microsecond_tuple, atom)
-
Возвращает кортеж микросекунд, усеченный до заданной точности (
:microsecond,:millisecondили:second)
Обработчики
- date_to_string(year, month, day)
-
Преобразует дату в строку в соответствии с календарем
- datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset)
-
Преобразует datetime (с часовым поясом) в строку в соответствии с календарем
- day_of_week(year, month, day)
-
Вычисляет день недели из заданных
year,month, иday - day_rollover_relative_to_midnight_utc()
-
Определяет момент перехода на следующий день для данного календаря
- days_in_month(year, month)
-
Возвращает количество дней в заданном месяце года
- leap_year?(year)
-
Возвращает
true, если заданный год високосный - months_in_year(year)
-
Возвращает количество месяцев в заданном году
- naive_datetime_from_iso_days(iso_days)
-
Преобразует
iso_days/0в формат даты и времени календаря - naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond)
-
Преобразует заданную дату и время (без часового пояса) в формат
iso_days/0 - naive_datetime_to_string(year, month, day, hour, minute, second, microsecond)
-
Преобразует дату и время (без часового пояса) в строку в соответствии с календарем
- time_from_day_fraction(day_fraction)
-
Преобразует
day_fraction/0в формат времени календаря - time_to_day_fraction(hour, minute, second, microsecond)
-
Преобразует заданное время в формат
day_fraction/0 - time_to_string(hour, minute, second, microsecond)
-
Преобразует время в строку в соответствии с календарем
- valid_date?(year, month, day)
-
Должно возвращать
true, если заданная дата описывает правильную дату в календаре - valid_time?(hour, minute, second, microsecond)
-
Должно возвращать
true, если заданное время описывает правильное время в календаре
Типы
calendar()
calendar() :: module()
Реализация календаря
date()
date() :: %{
optional(any()) => any(),
:calendar => calendar(),
:year => year(),
:month => month(),
:day => day()
} Любой map/struct, содержащий поля даты
datetime()
datetime() :: %{
optional(any()) => any(),
:calendar => calendar(),
:year => year(),
:month => month(),
:day => day(),
:hour => hour(),
:minute => minute(),
:second => second(),
:microsecond => microsecond(),
:time_zone => time_zone(),
:zone_abbr => zone_abbr(),
:utc_offset => utc_offset(),
:std_offset => std_offset()
} Любой map/struct, содержащий поля даты и времени
day()
day() :: integer()
day_fraction()
day_fraction() ::
{parts_in_day :: non_neg_integer(), parts_per_day :: pos_integer()} Внутренний формат времени используется при преобразовании между календарями.
Он представляет время как долю дня (начиная с полуночи). parts_in_day указывает, сколько времени уже прошло в течение дня, а parts_per_day указывает, сколько частей вмещается в день.
hour()
hour() :: integer()
iso_days()
iso_days() :: {days :: integer(), day_fraction()} Внутренний формат даты, используемый при преобразовании между календарями.
Это количество дней, включая дробную часть, прошедших с 0000-01-01+00:00T00:00.00000 в формате ISO 8601 (также известном как полуночь 1 января 1 года до н. э. пролептического григорианского календаря).
parts_per_day представляют, на сколько подчастей подразделен текущий день (для разных календарей может иметь смысл выбор другой parts_per_day). parts_in_day представляет собой количество таких parts_per_day , прошедших в течение последнего дня.
microsecond()
microsecond() :: {0..999_999, 0..6} Микросекунды с сохраненной точностью.
Точность представляет количество цифр, которое должно быть использовано при представлении микросекунд во внешнем формате. Если точность равна 0, это означает, что микросекунды должны быть пропущены.
minute()
minute() :: integer()
month()
month() :: integer()
naive_datetime()
naive_datetime() :: %{
optional(any()) => any(),
:calendar => calendar(),
:year => year(),
:month => month(),
:day => day(),
:hour => hour(),
:minute => minute(),
:second => second(),
:microsecond => microsecond()
} Любой map/struct, содержащий поля naive_datetime
second()
second() :: integer()
std_offset()
std_offset() :: integer()
Стандартное смещение часового пояса в секундах (не ноль в летнее время)
time()
time() :: %{
optional(any()) => any(),
:hour => hour(),
:minute => minute(),
:second => second(),
:microsecond => microsecond()
} Любой map/struct, содержащий поля времени
time_zone()
time_zone() :: String.t()
Идентификатор часового пояса в соответствии с базой данных IANA tz (например, Europe/Zurich)
utc_offset()
utc_offset() :: integer()
Смещение часового пояса UTC в секундах
year()
year() :: integer()
zone_abbr()
zone_abbr() :: String.t()
Аббревиатура часового пояса (например, CET или CEST или BST и т. д.)
Функции
compatible_calendars?(calendar, calendar) (since 1.5.0)
compatible_calendars?(Calendar.calendar(), Calendar.calendar()) :: boolean()
Возвращает true если у двух календарей одинаковый момент начала нового дня, false в противном случае.
Если два календаря несовместимы, мы можем преобразовывать только даты и время между ними. Если они совместимы, это означает, что мы также можем преобразовывать даты, а также неявные даты и время между ними.
truncate(microsecond_tuple, atom) (since 1.6.0)
truncate(Calendar.microsecond(), :microsecond | :millisecond | :second) :: Calendar.microsecond()
Возвращает кортеж микросекунд, усеченный до заданной точности (:microsecond, :millisecond или :second).
Обратные вызовы
date_to_string(year, month, day)
date_to_string(year(), month(), day()) :: String.t()
Преобразует дату в строку в соответствии с календарём.
datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset)
datetime_to_string( year(), month(), day(), hour(), minute(), second(), microsecond(), time_zone(), zone_abbr(), utc_offset(), std_offset() ) :: String.t()
Преобразует дату и время (с часовым поясом) в строку в соответствии с календарём.
day_of_week(year, month, day)
day_of_week(year(), month(), day()) :: non_neg_integer()
Вычисляет день недели из заданного year, month, и day.
day_rollover_relative_to_midnight_utc()
day_rollover_relative_to_midnight_utc() :: day_fraction()
Определяет момент перехода для данного календаря.
Это момент, в вашем календаре, когда текущий день заканчивается, а следующий начинается.
Результат этой функции используется для проверки, переходят ли два календаря в новый день в одно и то же время суток. Если нет, мы можем преобразовывать только даты и время между ними. Если да, это означает, что мы также можем преобразовывать даты и неявные даты и время между ними.
Эта доля дня должна быть представлена в возможно упрощенной форме, чтобы ускорить сравнения.
Примеры
- Если в вашем календаре новый день начинается в полночь, верните {0, 1}.
- Если в вашем календаре новый день начинается на рассвете, верните {1, 4}.
- Если в вашем календаре новый день начинается в полдень, верните {1, 2}.
- Если в вашем календаре новый день начинается на закате, верните {3, 4}.
days_in_month(year, month)
days_in_month(year(), month()) :: day()
Возвращает количество дней в данном месяце.
leap_year?(year)
leap_year?(year()) :: boolean()
Возвращает true если данный год является високосным.
Високосный год — это год большей длины, чем обычно. Точное значение зависит от календаря. Календарь должен вернуть false если он не поддерживает концепцию високосных лет.
months_in_year(year)
months_in_year(year()) :: month()
Возвращает количество месяцев в данном году.
naive_datetime_from_iso_days(iso_days)
naive_datetime_from_iso_days(iso_days()) ::
{year(), month(), day(), hour(), minute(), second(), microsecond()} Преобразует iso_days/0 в формат даты и времени календаря.
naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond)
naive_datetime_to_iso_days( year(), month(), day(), hour(), minute(), second(), microsecond() ) :: iso_days()
Преобразует заданную дату и время (без часового пояса) в формат iso_days/0.
naive_datetime_to_string(year, month, day, hour, minute, second, microsecond)
naive_datetime_to_string( year(), month(), day(), hour(), minute(), second(), microsecond() ) :: String.t()
Преобразует дату и время (без часового пояса) в строку в соответствии с календарём.
time_from_day_fraction(day_fraction)
time_from_day_fraction(day_fraction()) ::
{hour(), minute(), second(), microsecond()} Преобразует day_fraction/0 в формат времени календаря.
time_to_day_fraction(hour, minute, second, microsecond)
time_to_day_fraction(hour(), minute(), second(), microsecond()) :: day_fraction()
Преобразует заданное время в формат day_fraction/0.
time_to_string(hour, minute, second, microsecond)
time_to_string(hour(), minute(), second(), microsecond()) :: String.t()
Преобразует время в строку в соответствии с календарём.
valid_date?(year, month, day)
valid_date?(year(), month(), day()) :: boolean()
Должно вернуть true если заданная дата соответствует корректной дате в календаре.
valid_time?(hour, minute, second, microsecond)
valid_time?(hour(), minute(), second(), microsecond()) :: boolean()
Должно вернуть true если заданное время соответствует корректной дате в календаре.
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.7.4/Calendar.html