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_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_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)
Преобразует заданное время в строку.
- 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_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.
Примеры
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 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.15.4/Calendar.ISO.html