Spec-Zone.ru › Elixir 1.14

Calendar.ISO

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

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

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

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

Функции

Стандартная библиотека поддерживает минимальный набор возможных функций 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()

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

По умолчанию возвращает время в формате «расширенном» для лучшего восприятия человеком. Также поддерживается формат «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.14.1/Calendar.ISO.html

Spec-Zone.ru

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