Spec-Zone.ru › Elixir 1.17

Исходный код Calendar.ISO

Реализация календаря по умолчанию, григорианский календарь, соответствующий ISO 8601.

Этот календарь реализует пролептический григорианский календарь и поэтому совместим с календарём, используемым в большинстве стран сегодня. Пролептический означает, что правила григорианского календаря для високосных лет применяются для всего времени, в результате даты дают разные результаты до 1583 года, когда был принят григорианский календарь.

Соответствие стандарту ISO 8601

Спецификация ISO 8601 богата функциями, но позволяет приложениям выборочно реализовывать большинство её частей. Выбор Elixir перечислен ниже.

Функции

Стандартная библиотека поддерживает минимальный набор возможных функций ISO 8601. В частности, парсер поддерживает только даты календаря и не поддерживает форматы порядковых и неделевых дат. Кроме того, он поддерживает парсинг форматов ISO 8601 для продолжительности, включая отрицательные временные единицы и дробные секунды.

По умолчанию Elixir парсит только даты/времена в расширенном формате. Вы можете включить парсинг дат/времени в базовом формате.

NaiveDateTime.to_iso8601/2 и DateTime.to_iso8601/2 позволяют создавать строки в базовом или расширенном формате, а Calendar.strftime/2 позволяет форматировать даты и время как угодно.

Elixir не поддерживает форматы с уменьшенной точностью (например, дата без компонента дня) и десятичной точностью в наименьшем компоненте (например, 10:01:25,5).

Примеры

Elixir по умолчанию ожидает расширенный формат при парсинге:

iex> Calendar.ISO.parse_naive_datetime("2015-01-23T23:50:07")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("20150123T235007")
{:error, :invalid_format}

Парсинг можно ограничить базовым форматом, если нужно:

iex> Calendar.ISO.parse_naive_datetime("20150123T235007Z", :basic)
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("20150123T235007Z", :extended)
{:error, :invalid_format}

При парсинге поддерживаются только даты календаря; порядковые и недельные даты не поддерживаются.

iex> Calendar.ISO.parse_date("2015-04-15")
{:ok, {2015, 4, 15}}
iex> Calendar.ISO.parse_date("2015-105")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015-W16")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015-W016-3")
{:error, :invalid_format}

Годы, месяцы, дни, часы, минуты и секунды должны быть полностью указаны:

iex> Calendar.ISO.parse_date("2015-04-15")
{:ok, {2015, 4, 15}}
iex> Calendar.ISO.parse_date("2015-04")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015")
{:error, :invalid_format}

iex> Calendar.ISO.parse_time("23:50:07.0123456")
{:ok, {23, 50, 7, {12345, 6}}}
iex> Calendar.ISO.parse_time("23:50:07")
{:ok, {23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_time("23:50")
{:error, :invalid_format}
iex> Calendar.ISO.parse_time("23")
{:error, :invalid_format}

Расширения

Парсер и форматировщик используют одно расширение ISO 8601: расширенная запись года.

Это позволяет предварять даты знаком «+» или «−», расширяя диапазон выражаемых лет от значения по умолчанию (0000..9999) до -9999..9999. Elixir по-прежнему ограничивает годы в этом формате четырьмя цифрами.

Примеры

iex> Calendar.ISO.parse_date("-2015-01-23")
{:ok, {-2015, 1, 23}}
iex> Calendar.ISO.parse_date("+2015-01-23")
{:ok, {2015, 1, 23}}

iex> Calendar.ISO.parse_naive_datetime("-2015-01-23 23:50:07")
{:ok, {-2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("+2015-01-23 23:50:07")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}

iex> Calendar.ISO.parse_utc_datetime("-2015-01-23 23:50:07Z")
{:ok, {-2015, 1, 23, 23, 50, 7, {0, 0}}, 0}
iex> Calendar.ISO.parse_utc_datetime("+2015-01-23 23:50:07Z")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}, 0}

Добавления

ISO 8601 не допускает пробел вместо T в качестве разделителя между датой и временем, как при парсинге, так и при форматировании. Это достаточно распространённая запись, Elixir позволяет её при парсинге.

Форматирование дат в NaiveDateTime.to_iso8601/1 и DateTime.to_iso8601/1 генерирует строки, соответствующие спецификации, используя разделитель T.

Примеры

iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07.0123456")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23T23:50:07.0123456")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}}

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07.0123456Z")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}, 0}
iex> Calendar.ISO.parse_utc_datetime("2015-01-23T23:50:07.0123456Z")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}, 0}

Краткое описание

Типы

bce()

«До нашей эры» (до н.э.), для лет меньших 1.

ce()

«Нашей эры» (н.э.), которое начинается в году 1.

day()
day_of_week()

Целое число, представляющее день недели, где 1 — понедельник, а 7 — воскресенье.

day_of_year()
era()

Эра календаря.

format()
hour()
microsecond()

Микросекунды с сохранённой точностью.

minute()
month()
quarter_of_year()
second()
utc_offset()
weekday()
year()
year_of_era()

Функции

date_to_string(year, month, day, format \ :extended)

Преобразует заданную дату в строку.

datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset, format \ :extended)

Преобразует datetime (с часовым поясом) в строку.

day_of_era(year, month, day)

Вычисляет день и эру из заданных year, month, и day.

day_of_week(year, month, day, starting_on)

Вычисляет день недели из заданных year, month, и day.

day_of_year(year, month, day)

Вычисляет день года из заданных year, month, и day.

day_rollover_relative_to_midnight_utc()

См. Calendar.day_rollover_relative_to_midnight_utc/0 для документации.

days_in_month(year, month)

Возвращает количество дней в заданном году-месяце.

iso_days_to_beginning_of_day(arg)

Преобразует Calendar.iso_days/0 в первое мгновение дня.

iso_days_to_end_of_day(arg)

Преобразует Calendar.iso_days/0 в последнее мгновение дня.

leap_year?(year)

Возвращает, является ли данный год високосным.

months_in_year(year)

Возвращает количество месяцев в данном году.

naive_datetime_from_iso_days(arg)

Преобразует формат Calendar.iso_days/0 в формат datetime, указанный в этом календаре.

naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond)

Возвращает формат Calendar.iso_days/0 указанной даты.

naive_datetime_to_string(year, month, day, hour, minute, second, microsecond, format \ :extended)

Преобразует datetime (без часового пояса) в строку.

parse_date(string)

Парсит дату string в формате :extended.

parse_date(string, format)

Парсит дату string в соответствии с заданным format.

parse_duration(arg1)

Парсит строку продолжительности в формате ISO 8601 в список пар единиц, совместимых с Duration.

parse_naive_datetime(string)

Парсит простую дату-время string в формате :extended.

parse_naive_datetime(string, format)

Парсит простую дату-время string в соответствии с заданным format.

parse_time(string)

Парсит время string в формате :extended.

parse_time(string, format)

Парсит время string в соответствии с заданным format.

parse_utc_datetime(string)

Парсит UTC дату-время string в формате :extended.

parse_utc_datetime(string, format)

Парсит UTC дату-время string в соответствии с заданным format.

quarter_of_year(year, month, day)

Вычисляет квартал года из заданных year, month, и day.

shift_date(year, month, day, duration)

Смещает дату на продолжительность в соответствии с календарем.

shift_naive_datetime(year, month, day, hour, minute, second, microsecond, duration)

Смещает NaiveDateTime на продолжительность в соответствии с календарем.

shift_time(hour, minute, second, microsecond, duration)

Смещает время на продолжительность в соответствии с календарем.

time_from_day_fraction(arg)

Преобразует дробную часть дня в представление времени в этом календаре.

time_to_day_fraction(hour, minute, second, arg)

Возвращает нормализованную дробную часть дня для указанного времени.

time_to_string(hour, minute, second, microsecond, format \ :extended)

Преобразует заданное время в строку.

time_unit_to_precision(int)

Преобразует System.time_unit/0 в точность.

valid_date?(year, month, day)

Определяет, является ли заданная дата корректной в соответствии с пролептическим григорианским календарем.

valid_time?(hour, minute, second, microsecond)

Определяет, является ли заданное время корректным в соответствии с пролептическим григорианским календарем.

year_of_era(year)

Вычисляет год и эру из заданного year.

year_of_era(year, month, day)

Обработчик календаря для вычисления года и эры из заданных year, month, и day.

Типы

bce()Source

@type bce() :: 0

«До нашей эры» (до н.э.), для тех лет, которые меньше 1.

ce()Source

@type ce() :: 1

«Наша эра» или «Новая эра» (н.э.), которая начинается в году 1.

day()Source

@type day() :: 1..31

day_of_week()Source

@type day_of_week() :: 1..7

Целое число, представляющее день недели, где 1 — понедельник, а 7 — воскресенье.

day_of_year()Source

@type day_of_year() :: 1..366

era()Source

@type era() :: bce() | ce()

Эра календаря.

Календарь ISO имеет две эры:

  • CE — которая начинается в году 1 и определена как эра 1.
  • BCE — для тех лет, которые меньше 1 и определена как эра 0.

format()Source

@type format() :: :basic | :extended

hour()Source

@type hour() :: 0..23

microsecond()Source

@type microsecond() :: {0..999_999, 0..6}

Микросекунды с сохранённой точностью.

Точность представляет собой количество цифр, которые должны использоваться при представлении микросекунд во внешнем формате. Если точность равна 0, это означает, что микросекунды должны быть пропущены.

minute()Source

@type minute() :: 0..59

month()Source

@type month() :: 1..12

quarter_of_year()Source

@type quarter_of_year() :: 1..4

second()Source

@type second() :: 0..59

utc_offset()Source

@type utc_offset() :: integer()

weekday()Source

@type weekday() ::
  :monday | :tuesday | :wednesday | :thursday | :friday | :saturday | :sunday

year()Source

@type year() :: -9999..9999

year_of_era()Source

@type year_of_era() :: {1..10000, era()}

Функции

date_to_string(year, month, day, format \\ :extended)Source

@spec date_to_string(year(), month(), day(), :basic | :extended) :: String.t()

Преобразует заданную дату в строку.

По умолчанию возвращает даты в формате "extended" для лучшей читаемости. Также поддерживается формат "basic" с использованием опции :basic.

Примеры

iex> Calendar.ISO.date_to_string(2015, 2, 28)
"2015-02-28"
iex> Calendar.ISO.date_to_string(2017, 8, 1)
"2017-08-01"
iex> Calendar.ISO.date_to_string(-99, 1, 31)
"-0099-01-31"

iex> Calendar.ISO.date_to_string(2015, 2, 28, :basic)
"20150228"
iex> Calendar.ISO.date_to_string(-99, 1, 31, :basic)
"-00990131"

datetime_to_string(year, month, day, hour, minute, second, microsecond, time_zone, zone_abbr, utc_offset, std_offset, format \\ :extended)Source

@spec datetime_to_string(
  year(),
  month(),
  day(),
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond(),
  Calendar.time_zone(),
  Calendar.zone_abbr(),
  Calendar.utc_offset(),
  Calendar.std_offset(),
  :basic | :extended
) :: String.t()

Преобразует дату и время (с часовым поясом) в строку.

По умолчанию возвращает даты и время в формате "extended" для лучшей читаемости. Также поддерживается формат "basic" с использованием опции :basic.

Примеры

iex> time_zone = "Etc/UTC"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "UTC", 0, 0)
"2017-08-01 01:02:03.00000Z"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "UTC", 3600, 0)
"2017-08-01 01:02:03.00000+01:00"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "UTC", 3600, 3600)
"2017-08-01 01:02:03.00000+02:00"

iex> time_zone = "Europe/Berlin"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "CET", 3600, 0)
"2017-08-01 01:02:03.00000+01:00 CET Europe/Berlin"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "CDT", 3600, 3600)
"2017-08-01 01:02:03.00000+02:00 CDT Europe/Berlin"

iex> time_zone = "America/Los_Angeles"
iex> Calendar.ISO.datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 5}, time_zone, "PST", -28800, 0)
"2015-02-28 01:02:03.00000-08:00 PST America/Los_Angeles"
iex> Calendar.ISO.datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 5}, time_zone, "PDT", -28800, 3600)
"2015-02-28 01:02:03.00000-07:00 PDT America/Los_Angeles"

iex> time_zone = "Europe/Berlin"
iex> Calendar.ISO.datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5}, time_zone, "CET", 3600, 0, :basic)
"20170801 010203.00000+0100 CET Europe/Berlin"

day_of_era(year, month, day)Source

@spec day_of_era(year(), month(), day()) :: Calendar.day_of_era()

Вычисляет день и эру по заданному year, month, и day.

Примеры

iex> Calendar.ISO.day_of_era(0, 1, 1)
{366, 0}
iex> Calendar.ISO.day_of_era(1, 1, 1)
{1, 1}
iex> Calendar.ISO.day_of_era(0, 12, 31)
{1, 0}
iex> Calendar.ISO.day_of_era(0, 12, 30)
{2, 0}
iex> Calendar.ISO.day_of_era(-1, 12, 31)
{367, 0}

day_of_week(year, month, day, starting_on)Source

@spec day_of_week(year(), month(), day(), :default | weekday()) ::
  {day_of_week(), 1, 7}

Вычисляет день недели по заданному year, month, и day.

Это целое число от 1 до 7, где 1 — указанный starting_on день недели. Например, если starting_on установлено на :monday, то 1 — понедельник, а 7 — воскресенье.

starting_on также может быть :default, что эквивалентно :monday.

Примеры

iex> Calendar.ISO.day_of_week(2016, 10, 31, :monday)
{1, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 1, :monday)
{2, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 2, :monday)
{3, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 3, :monday)
{4, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 4, :monday)
{5, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 5, :monday)
{6, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 6, :monday)
{7, 1, 7}
iex> Calendar.ISO.day_of_week(-99, 1, 31, :monday)
{4, 1, 7}

iex> Calendar.ISO.day_of_week(2016, 10, 31, :sunday)
{2, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 1, :sunday)
{3, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 2, :sunday)
{4, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 3, :sunday)
{5, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 4, :sunday)
{6, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 5, :sunday)
{7, 1, 7}
iex> Calendar.ISO.day_of_week(2016, 11, 6, :sunday)
{1, 1, 7}
iex> Calendar.ISO.day_of_week(-99, 1, 31, :sunday)
{5, 1, 7}

iex> Calendar.ISO.day_of_week(2016, 10, 31, :saturday)
{3, 1, 7}

day_of_year(year, month, day)Source

@spec day_of_year(year(), month(), day()) :: day_of_year()

Вычисляет день года по заданному year, month, и day.

Это целое число от 1 до 366.

Примеры

iex> Calendar.ISO.day_of_year(2016, 1, 31)
31
iex> Calendar.ISO.day_of_year(-99, 2, 1)
32
iex> Calendar.ISO.day_of_year(2018, 2, 28)
59

day_rollover_relative_to_midnight_utc()Source

@spec day_rollover_relative_to_midnight_utc() :: {0, 1}

См. Calendar.day_rollover_relative_to_midnight_utc/0 для документации.

days_in_month(year, month)Source

@spec days_in_month(year(), month()) :: 28..31

Возвращает количество дней в заданном году и месяце.

Примеры

iex> Calendar.ISO.days_in_month(1900, 1)
31
iex> Calendar.ISO.days_in_month(1900, 2)
28
iex> Calendar.ISO.days_in_month(2000, 2)
29
iex> Calendar.ISO.days_in_month(2001, 2)
28
iex> Calendar.ISO.days_in_month(2004, 2)
29
iex> Calendar.ISO.days_in_month(2004, 4)
30
iex> Calendar.ISO.days_in_month(-1, 5)
31

iso_days_to_beginning_of_day(arg)Source

@spec iso_days_to_beginning_of_day(Calendar.iso_days()) :: Calendar.iso_days()

Преобразует Calendar.iso_days/0 в момент начала дня.

Примеры

iex> Calendar.ISO.iso_days_to_beginning_of_day({0, {0, 86400000000}})
{0, {0, 86400000000}}
iex> Calendar.ISO.iso_days_to_beginning_of_day({730485, {43200000000, 86400000000}})
{730485, {0, 86400000000}}
iex> Calendar.ISO.iso_days_to_beginning_of_day({730485, {46800000000, 86400000000}})
{730485, {0, 86400000000}}

iso_days_to_end_of_day(arg)Source

@spec iso_days_to_end_of_day(Calendar.iso_days()) :: Calendar.iso_days()

Преобразует Calendar.iso_days/0 в момент конца дня.

Примеры

iex> Calendar.ISO.iso_days_to_end_of_day({0, {0, 86400000000}})
{0, {86399999999, 86400000000}}
iex> Calendar.ISO.iso_days_to_end_of_day({730485, {43200000000, 86400000000}})
{730485, {86399999999, 86400000000}}
iex> Calendar.ISO.iso_days_to_end_of_day({730485, {46800000000, 86400000000}})
{730485, {86399999999, 86400000000}}

leap_year?(year)Source

@spec leap_year?(year()) :: boolean()

Возвращает, является ли заданный год високосным.

Примеры

iex> Calendar.ISO.leap_year?(2000)
true
iex> Calendar.ISO.leap_year?(2001)
false
iex> Calendar.ISO.leap_year?(2004)
true
iex> Calendar.ISO.leap_year?(1900)
false
iex> Calendar.ISO.leap_year?(-4)
true

months_in_year(year)Source

@spec months_in_year(year()) :: 12

Возвращает количество месяцев в заданном году.

Пример

iex> Calendar.ISO.months_in_year(2004)
12

naive_datetime_from_iso_days(arg)Source

@spec naive_datetime_from_iso_days(Calendar.iso_days()) ::
  {Calendar.year(), Calendar.month(), Calendar.day(), Calendar.hour(),
   Calendar.minute(), Calendar.second(), Calendar.microsecond()}

Преобразует формат Calendar.iso_days/0 в формат даты и времени, определённый этим календарём.

Примеры

iex> Calendar.ISO.naive_datetime_from_iso_days({0, {0, 86400}})
{0, 1, 1, 0, 0, 0, {0, 6}}
iex> Calendar.ISO.naive_datetime_from_iso_days({730_485, {0, 86400}})
{2000, 1, 1, 0, 0, 0, {0, 6}}
iex> Calendar.ISO.naive_datetime_from_iso_days({730_485, {43200, 86400}})
{2000, 1, 1, 12, 0, 0, {0, 6}}
iex> Calendar.ISO.naive_datetime_from_iso_days({-365, {0, 86400000000}})
{-1, 1, 1, 0, 0, 0, {0, 6}}

naive_datetime_to_iso_days(year, month, day, hour, minute, second, microsecond)Source

@spec naive_datetime_to_iso_days(
  Calendar.year(),
  Calendar.month(),
  Calendar.day(),
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond()
) :: Calendar.iso_days()

Возвращает формат Calendar.iso_days/0 для заданной даты.

Примеры

iex> Calendar.ISO.naive_datetime_to_iso_days(0, 1, 1, 0, 0, 0, {0, 6})
{0, {0, 86400000000}}
iex> Calendar.ISO.naive_datetime_to_iso_days(2000, 1, 1, 12, 0, 0, {0, 6})
{730485, {43200000000, 86400000000}}
iex> Calendar.ISO.naive_datetime_to_iso_days(2000, 1, 1, 13, 0, 0, {0, 6})
{730485, {46800000000, 86400000000}}
iex> Calendar.ISO.naive_datetime_to_iso_days(-1, 1, 1, 0, 0, 0, {0, 6})
{-365, {0, 86400000000}}

naive_datetime_to_string(year, month, day, hour, minute, second, microsecond, format \\ :extended)Source

@spec naive_datetime_to_string(
  year(),
  month(),
  day(),
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond(),
  :basic | :extended
) :: String.t()

Преобразует дату и время (без часового пояса) в строку.

По умолчанию возвращает даты и время в формате "extended" для лучшей читаемости. Также поддерживается формат "basic" с использованием опции :basic.

Примеры

iex> Calendar.ISO.naive_datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 6})
"2015-02-28 01:02:03.000004"
iex> Calendar.ISO.naive_datetime_to_string(2017, 8, 1, 1, 2, 3, {4, 5})
"2017-08-01 01:02:03.00000"

iex> Calendar.ISO.naive_datetime_to_string(2015, 2, 28, 1, 2, 3, {4, 6}, :basic)
"20150228 010203.000004"

parse_date(string)Source

@spec parse_date(String.t()) :: {:ok, {year(), month(), day()}} | {:error, atom()}

Парсит дату string в формате :extended.

Дополнительную информацию о поддерживаемых строках см. в реализации модуля ISO 8601.

Примеры

iex> Calendar.ISO.parse_date("2015-01-23")
{:ok, {2015, 1, 23}}

iex> Calendar.ISO.parse_date("2015:01:23")
{:error, :invalid_format}
iex> Calendar.ISO.parse_date("2015-01-32")
{:error, :invalid_date}

parse_date(string, format)Source

@spec parse_date(String.t(), format()) ::
  {:ok, {year(), month(), day()}} | {:error, atom()}

Парсит дату string согласно заданному формату format.

Формат может быть :basic или :extended.

Дополнительную информацию о поддерживаемых строках см. в реализации модуля ISO 8601.

Примеры

iex> Calendar.ISO.parse_date("20150123", :basic)
{:ok, {2015, 1, 23}}
iex> Calendar.ISO.parse_date("20150123", :extended)
{:error, :invalid_format}

parse_duration(arg1)Source

@spec parse_duration(String.t()) :: {:ok, [Duration.unit_pair()]} | {:error, atom()}

Парсит строку длительности в формате ISO 8601 в список пар единиц, совместимых с Duration.

См. Duration.from_iso8601/1.

parse_naive_datetime(string)Source

@spec parse_naive_datetime(String.t()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}}
  | {:error, atom()}

Парсит нативную дату и время string в формате :extended.

Дополнительную информацию о поддерживаемых строках см. в реализации модуля ISO 8601.

Примеры

iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07Z")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07-02:30")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}

iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07.0")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 1}}}
iex> Calendar.ISO.parse_naive_datetime("2015-01-23 23:50:07,0123456")
{:ok, {2015, 1, 23, 23, 50, 7, {12345, 6}}}

parse_naive_datetime(string, format)Source

@spec parse_naive_datetime(String.t(), format()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()}}
  | {:error, atom()}

Парсит простую дату и время string в соответствии с заданным format.

Формат format может быть :basic или :extended.

Дополнительную информацию о поддерживаемых строках см. в разделе, описывающем реализацию ISO 8601 в этом модуле.

Примеры

iex> Calendar.ISO.parse_naive_datetime("20150123 235007", :basic)
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_naive_datetime("20150123 235007", :extended)
{:error, :invalid_format}

parse_time(string)Source

@spec parse_time(String.t()) ::
  {:ok, {hour(), minute(), second(), microsecond()}} | {:error, atom()}

Парсит время string в формате :extended.

Дополнительную информацию о поддерживаемых строках см. в разделе, описывающем реализацию ISO 8601 в этом модуле.

Примеры

iex> Calendar.ISO.parse_time("23:50:07")
{:ok, {23, 50, 7, {0, 0}}}

iex> Calendar.ISO.parse_time("23:50:07Z")
{:ok, {23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_time("T23:50:07Z")
{:ok, {23, 50, 7, {0, 0}}}

parse_time(string, format)Source

@spec parse_time(String.t(), format()) ::
  {:ok, {hour(), minute(), second(), microsecond()}} | {:error, atom()}

Парсит время string в соответствии с заданным format.

Формат format может быть :basic или :extended.

Дополнительную информацию о поддерживаемых строках см. в разделе, описывающем реализацию ISO 8601 в этом модуле.

Примеры

iex> Calendar.ISO.parse_time("235007", :basic)
{:ok, {23, 50, 7, {0, 0}}}
iex> Calendar.ISO.parse_time("235007", :extended)
{:error, :invalid_format}

parse_utc_datetime(string)Source

@spec parse_utc_datetime(String.t()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()},
   utc_offset()}
  | {:error, atom()}

Парсит UTC дату и время string в формате :extended.

Дополнительную информацию о поддерживаемых строках см. в разделе, описывающем реализацию ISO 8601 в этом модуле.

Примеры

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07Z")
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}, 0}

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07+02:30")
{:ok, {2015, 1, 23, 21, 20, 7, {0, 0}}, 9000}

iex> Calendar.ISO.parse_utc_datetime("2015-01-23 23:50:07")
{:error, :missing_offset}

parse_utc_datetime(string, format)Source

@spec parse_utc_datetime(String.t(), format()) ::
  {:ok, {year(), month(), day(), hour(), minute(), second(), microsecond()},
   utc_offset()}
  | {:error, atom()}

Парсит UTC дату и время string в соответствии с заданным format.

Формат format может быть :basic или :extended.

Дополнительную информацию о поддерживаемых строках см. в разделе, описывающем реализацию ISO 8601 в этом модуле.

Примеры

iex> Calendar.ISO.parse_utc_datetime("20150123 235007Z", :basic)
{:ok, {2015, 1, 23, 23, 50, 7, {0, 0}}, 0}
iex> Calendar.ISO.parse_utc_datetime("20150123 235007Z", :extended)
{:error, :invalid_format}

quarter_of_year(year, month, day)Source

@spec quarter_of_year(year(), month(), day()) :: quarter_of_year()

Вычисляет квартал года по заданному year, month, и day.

Возвращает целое число от 1 до 4.

Примеры

iex> Calendar.ISO.quarter_of_year(2016, 1, 31)
1
iex> Calendar.ISO.quarter_of_year(2016, 4, 3)
2
iex> Calendar.ISO.quarter_of_year(-99, 9, 31)
3
iex> Calendar.ISO.quarter_of_year(2018, 12, 28)
4

shift_date(year, month, day, duration)Source

@spec shift_date(year(), month(), day(), Duration.t()) :: {year(), month(), day()}

Сдвигает дату на заданную длительность в соответствии с календарем.

Примеры

iex> Calendar.ISO.shift_date(2016, 1, 3, Duration.new!(month: 2))
{2016, 3, 3}
iex> Calendar.ISO.shift_date(2016, 2, 29, Duration.new!(month: 1))
{2016, 3, 29}
iex> Calendar.ISO.shift_date(2016, 1, 31, Duration.new!(month: 1))
{2016, 2, 29}
iex> Calendar.ISO.shift_date(2016, 1, 31, Duration.new!(year: 4, day: 1))
{2020, 2, 1}

shift_naive_datetime(year, month, day, hour, minute, second, microsecond, duration)Source

@spec shift_naive_datetime(
  year(),
  month(),
  day(),
  hour(),
  minute(),
  second(),
  microsecond(),
  Duration.t()
) :: {year(), month(), day(), hour(), minute(), second(), microsecond()}

Сдвигает простую дату и время на заданную длительность в соответствии с календарем.

Примеры

iex> Calendar.ISO.shift_naive_datetime(2016, 1, 3, 0, 0, 0, {0, 0}, Duration.new!(hour: 1))
{2016, 1, 3, 1, 0, 0, {0, 0}}
iex> Calendar.ISO.shift_naive_datetime(2016, 1, 3, 0, 0, 0, {0, 0}, Duration.new!(hour: 30))
{2016, 1, 4, 6, 0, 0, {0, 0}}
iex> Calendar.ISO.shift_naive_datetime(2016, 1, 3, 0, 0, 0, {0, 0}, Duration.new!(microsecond: {100, 6}))
{2016, 1, 3, 0, 0, 0, {100, 6}}

shift_time(hour, minute, second, microsecond, duration)Source

@spec shift_time(hour(), minute(), second(), microsecond(), Duration.t()) ::
  {hour(), minute(), second(), microsecond()}

Сдвигает время на заданную длительность в соответствии с календарем.

Примеры

iex> Calendar.ISO.shift_time(13, 0, 0, {0, 0}, Duration.new!(hour: 2))
{15, 0, 0, {0, 0}}
iex> Calendar.ISO.shift_time(13, 0, 0, {0, 0}, Duration.new!(microsecond: {100, 6}))
{13, 0, 0, {100, 6}}

time_from_day_fraction(arg)Source

@spec time_from_day_fraction(Calendar.day_fraction()) ::
  {hour(), minute(), second(), microsecond()}

Преобразует дробную часть дня в представление времени данного календаря.

Примеры

iex> Calendar.ISO.time_from_day_fraction({1, 2})
{12, 0, 0, {0, 6}}
iex> Calendar.ISO.time_from_day_fraction({13, 24})
{13, 0, 0, {0, 6}}

time_to_day_fraction(hour, minute, second, arg)Source

@spec time_to_day_fraction(
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond()
) :: Calendar.day_fraction()

Возвращает нормализованную дробную часть дня указанного времени.

Примеры

iex> Calendar.ISO.time_to_day_fraction(0, 0, 0, {0, 6})
{0, 86400000000}
iex> Calendar.ISO.time_to_day_fraction(12, 34, 56, {123, 6})
{45296000123, 86400000000}

time_to_string(hour, minute, second, microsecond, format \\ :extended)Source

@spec time_to_string(
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond(),
  :basic | :extended
) :: String.t()

Преобразует заданное время в строку.

По умолчанию, возвращает время в формате "extended" для лучшей читаемости. Также поддерживается формат "basic" при передаче опции :basic.

Примеры

iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 6})
"02:02:02.000002"
iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 2})
"02:02:02.00"
iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 0})
"02:02:02"

iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 6}, :basic)
"020202.000002"
iex> Calendar.ISO.time_to_string(2, 2, 2, {2, 6}, :extended)
"02:02:02.000002"

time_unit_to_precision(int)Source

@spec time_unit_to_precision(System.time_unit()) :: 0..6

Преобразует System.time_unit/0 в точность.

Целочисленные единицы времени всегда получают максимальную точность.

Примеры

iex> Calendar.ISO.time_unit_to_precision(:nanosecond)
6

iex> Calendar.ISO.time_unit_to_precision(:second)
0

iex> Calendar.ISO.time_unit_to_precision(1)
6

valid_date?(year, month, day)Source

@spec valid_date?(year(), month(), day()) :: boolean()

Определяет, является ли заданная дата действительной в соответствии с пролептическим григорианским календарем.

Примеры

iex> Calendar.ISO.valid_date?(2015, 2, 28)
true
iex> Calendar.ISO.valid_date?(2015, 2, 30)
false
iex> Calendar.ISO.valid_date?(-1, 12, 31)
true
iex> Calendar.ISO.valid_date?(-1, 12, 32)
false

valid_time?(hour, minute, second, microsecond)Source

@spec valid_time?(
  Calendar.hour(),
  Calendar.minute(),
  Calendar.second(),
  Calendar.microsecond()
) ::
  boolean()

Определяет, является ли заданное время действительным в соответствии с пролептическим григорианским календарем.

Високосные секунды не поддерживаются встроенным календарем Calendar.ISO.

Примеры

iex> Calendar.ISO.valid_time?(10, 50, 25, {3006, 6})
true
iex> Calendar.ISO.valid_time?(23, 59, 60, {0, 0})
false
iex> Calendar.ISO.valid_time?(24, 0, 0, {0, 0})
false

year_of_era(year)Source

@spec year_of_era(year()) :: {1..10000, era()}

Вычисляет год и эру по заданному year.

Календарь ISO имеет две эры: "текущая эра" (CE), которая начинается в году 1 и определяется как эра 1. И "до текущей эры" (BCE) для лет меньше чем 1, определенная как эра 0.

Примеры

iex> Calendar.ISO.year_of_era(1)
{1, 1}
iex> Calendar.ISO.year_of_era(2018)
{2018, 1}
iex> Calendar.ISO.year_of_era(0)
{1, 0}
iex> Calendar.ISO.year_of_era(-1)
{2, 0}

year_of_era(year, month, day)Source

@spec year_of_era(year(), month(), day()) :: {1..10000, era()}

Обработчик календаря для вычисления года и эры по заданному year, month, и day.

В календаре ISO новый год совпадает с новой эрой, поэтому аргументы month и day игнорируются. Если доступен только год, можно использовать year_of_era/1 вместо этого.

Примеры

iex> Calendar.ISO.year_of_era(1, 1, 1)
{1, 1}
iex> Calendar.ISO.year_of_era(2018, 12, 1)
{2018, 1}
iex> Calendar.ISO.year_of_era(0, 1, 1)
{1, 0}
iex> Calendar.ISO.year_of_era(-1, 12, 1)
{2, 0}

Скачать версию ePub

Создано с использованием ExDoc (v0.34.1) для язык программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.17.2/Calendar.ISO.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API