Spec-Zone.ru › Elixir 1.16

Источник 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()

"До нашей эры" (BCE) для годов меньших, чем 1.

ce()

«Наша эра» (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_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.

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.

END_OF_DOCUMENT_MARKER

Типы

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 имеет две эры:

  • н. э. — которая начинается в году 1 и определяется как эра 1.
  • до н. э. — для тех лет, которые меньше 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()}
END_OF_DOCUMENT_MARKER

Функции

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

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

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

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

Формат может быть :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.

Формат может быть :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.

Формат может быть :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"

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.32.2) для языка программирования Elixir

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

Spec-Zone.ru

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