Spec-Zone.ru › Elixir 1.13

Calendar.ISO

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

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

Соответствие ISO 8601

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

Функции

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

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

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

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

Примеры

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)

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

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_naive_datetime(string)

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

parse_naive_datetime(string, format)

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

parse_time(string)

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

parse_time(string, format)

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

parse_utc_datetime(string)

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

parse_utc_datetime(string, format)

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

quarter_of_year(year, month, day)

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

time_from_day_fraction(arg)

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

time_to_day_fraction(hour, minute, second, arg)

Возвращает нормированную долю дня заданного времени.

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

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

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()

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

По умолчанию возвращает даты, отформатированные в «расширенном» формате, для удобочитаемости человеком. Он также поддерживает «базовый» формат, передавая опцию :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()

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

По умолчанию возвращает даты и время, отформатированные в «расширенном» формате, для удобочитаемости человеком. Он также поддерживает «базовый» формат, передавая опцию :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

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()

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

По умолчанию возвращает даты и время, отформатированные в «расширенном» формате, для удобочитаемости человеком. Он также поддерживает «базовый» формат, передавая опцию :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.

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_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

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"

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}

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.13.4/Calendar.ISO.html

Spec-Zone.ru

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