Исходный код 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_of_week()
Целое число, представляющее день недели, где 1 — понедельник, а 7 — воскресенье.
- era()
Эра календаря.
- microsecond()
Микросекунды с сохранённой точностью.
Функции
- 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 имеет две эры:
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
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.
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.
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()} Сдвигает NaiveDateTime на заданную длительность в соответствии с календарем.
Примеры
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}
© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.18.1/Calendar.ISO.html