NaiveDateTime
Структура NaiveDateTime (без часового пояса) и связанные функции.
Структура NaiveDateTime содержит поля year, month, day, hour, minute, second, microsecond и calendar. Новые даты и время без часового пояса можно создать с помощью функций new/2 и new/8 или используя сигил ~N (см. sigil_N/2):
iex> ~N[2000-01-01 23:00:07] ~N[2000-01-01 23:00:07]
К полям даты и времени в структуре можно получить доступ напрямую:
iex> naive = ~N[2000-01-01 23:00:07] iex> naive.year 2000 iex> naive.second 7
Мы называем их "наивными", потому что эта форма представления даты и времени не имеет часового пояса. Это означает, что время может не существовать в определённых регионах мира, даже если оно является допустимым.
Например, при переходе на летнее/зимнее время в регионе часы обычно переводятся вперёд или назад на один час. Это означает, что определённые моменты времени никогда не происходят или могут происходить более одного раза. Поскольку NaiveDateTime не проверяется по отношению к часовому поясу, такие ошибки останутся незамеченными.
Разработчики должны избегать создания структур NaiveDateTime напрямую и вместо этого полагаться на функции, предоставляемые этим модулем, а также на функции из сторонних библиотек календарей.
Сравнение наивных дат и времени
Сравнения в Elixir с использованием ==/2, >/2, </2 и аналогичных структурных и основаны на полях структуры NaiveDateTime. Для правильного сравнения наивных дат и времени используйте функцию compare/2. Наличие функции compare/2 в этом модуле также позволяет использовать функции Enum.min/2 и Enum.max/2 для получения минимальной и максимальной наивной даты и времени из Enum. Например:
iex> Enum.min([~N[2020-01-01 23:00:07], ~N[2000-01-01 23:00:07]], NaiveDateTime) ~N[2000-01-01 23:00:07]
Использование эпох
Функции add/3 и diff/3 могут использоваться для вычисления дат и времени или получения количества секунд между моментами. Например, если нужно вычислить количество секунд от эпохи Unix (1970-01-01 00:00:00):
iex> NaiveDateTime.diff(~N[2010-04-17 14:00:00], ~N[1970-01-01 00:00:00]) 1271512800 iex> NaiveDateTime.add(~N[1970-01-01 00:00:00], 1_271_512_800) ~N[2010-04-17 14:00:00]
Эти функции оптимизированы для работы с общими эпохами, такими как эпоха Unix или эпоха Григорианского календаря (0000-01-01 00:00:00).
Резюме
Типы
Функции
- add(naive_datetime, amount_to_add, unit \\ :second)
Добавляет заданное количество времени к
NaiveDateTime.- compare(naive_datetime1, naive_datetime2)
Сравнивает две структуры
NaiveDateTime.- convert(naive_datetime, calendar)
Преобразует указанную
naive_datetimeиз одного календаря в другой.- convert!(naive_datetime, calendar)
Преобразует указанную
naive_datetimeиз одного календаря в другой.- diff(naive_datetime1, naive_datetime2, unit \\ :second)
Вычитает
naive_datetime2изnaive_datetime1.- from_erl(tuple, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
Преобразует кортеж Erlang datetime в структуру
NaiveDateTime.- from_erl!(tuple, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
Преобразует кортеж Erlang datetime в структуру
NaiveDateTime.- from_gregorian_seconds(seconds, arg \\ {0, 0}, calendar \\ Calendar.ISO)
Преобразует количество секунд григорианского календаря в структуру
NaiveDateTime.- from_iso8601(string, calendar \\ Calendar.ISO)
Парсит расширенный формат «Дата и время суток», описанный в ISO 8601:2019.
- from_iso8601!(string, calendar \\ Calendar.ISO)
Парсит расширенный формат «Дата и время суток», описанный в ISO 8601:2019.
- local_now(calendar \\ Calendar.ISO)
Возвращает «местное время» для машины, на которой выполняется программа Elixir.
- new(date, time)
Создаёт наивную дату и время из структур date и time.
- new(year, month, day, hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
Создаёт новую наивную дату и время ISO.
- new!(date, time)
Создаёт наивную дату и время из структур date и time.
- new!(year, month, day, hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)
Создаёт новую наивную дату и время ISO.
- to_date(map)
Преобразует
NaiveDateTimeвDate.- to_erl(naive_datetime)
Преобразует структуру
NaiveDateTimeв кортеж Erlang datetime.- to_gregorian_seconds(map)
Преобразует структуру
NaiveDateTimeв количество секунд и микросекунд григорианского календаря.- to_iso8601(naive_datetime, format \\ :extended)
Преобразует данную наивную дату и время в ISO 8601:2019.
- to_string(naive_datetime)
Преобразует данную наивную дату и время в строку в соответствии с её календарём.
- to_time(map)
Преобразует
NaiveDateTimeвTime.- truncate(naive_datetime, precision)
Возвращает данную наивную дату и время с полем microsecond, усечённым до заданной точности (
:microsecond,:millisecondили:second).- utc_now(calendar \\ Calendar.ISO)
Возвращает текущую наивную дату и время в UTC.
Типы
t()Source
@type t() :: %NaiveDateTime{
calendar: Calendar.calendar(),
day: Calendar.day(),
hour: Calendar.hour(),
microsecond: Calendar.microsecond(),
minute: Calendar.minute(),
month: Calendar.month(),
second: Calendar.second(),
year: Calendar.year()
} Функции
add(naive_datetime, amount_to_add, unit \\ :second)Источник
@spec add( Calendar.naive_datetime(), integer(), :day | :hour | :minute | System.time_unit() ) :: t()
Добавляет указанное количество времени к NaiveDateTime.
Принимает amount_to_add в любом unit. unit может быть :day, :hour, :minute, :second или любой точностью до долей секунды из System.time_unit/0. По умолчанию используется :second. Отрицательные значения будут перемещать во времени назад.
Эта функция всегда учитывает единицу измерения, вычисляемую в соответствии с Calendar.ISO.
Примеры
По умолчанию используется секунда:
# adds seconds by default iex> NaiveDateTime.add(~N[2014-10-02 00:29:10], 2) ~N[2014-10-02 00:29:12] # accepts negative offsets iex> NaiveDateTime.add(~N[2014-10-02 00:29:10], -2) ~N[2014-10-02 00:29:08]
Также может работать с точностью до долей секунды:
iex> NaiveDateTime.add(~N[2014-10-02 00:29:10], 2_000, :millisecond) ~N[2014-10-02 00:29:12]
А также с днями/часами/минутами:
iex> NaiveDateTime.add(~N[2015-02-28 00:29:10], 2, :day) ~N[2015-03-02 00:29:10] iex> NaiveDateTime.add(~N[2015-02-28 00:29:10], 36, :hour) ~N[2015-03-01 12:29:10] iex> NaiveDateTime.add(~N[2015-02-28 00:29:10], 60, :minute) ~N[2015-02-28 01:29:10]
Эта операция сохраняет точность даты-времени без учета часового пояса:
iex> NaiveDateTime.add(~N[2014-10-02 00:29:10.021], 21, :second) ~N[2014-10-02 00:29:31.021]
И игнорирует любые изменения ниже точности:
iex> hidden = NaiveDateTime.add(~N[2014-10-02 00:29:10], 21, :millisecond)
iex> hidden.microsecond # ~N[2014-10-02 00:29:10]
{21000, 0}
Операции над григорианскими секундами или эпохой Unix оптимизированы:
# from Gregorian seconds iex> NaiveDateTime.add(~N[0000-01-01 00:00:00], 63_579_428_950) ~N[2014-10-02 00:29:10]
Передача DateTime автоматически преобразует её в NaiveDateTime, отбрасывая информацию о часовом поясе:
iex> dt = %DateTime{year: 2000, month: 2, day: 29, zone_abbr: "CET",
...> hour: 23, minute: 0, second: 7, microsecond: {0, 0},
...> utc_offset: 3600, std_offset: 0, time_zone: "Europe/Warsaw"}
iex> NaiveDateTime.add(dt, 21, :second)
~N[2000-02-29 23:00:28] compare(naive_datetime1, naive_datetime2)Источник
@spec compare(Calendar.naive_datetime(), Calendar.naive_datetime()) :: :lt | :eq | :gt
Сравнивает две структуры NaiveDateTime.
Возвращает :gt , если первая структура позже, чем вторая, и :lt в обратном случае. Если две структуры NaiveDateTime равны, возвращается :eq.
Примеры
iex> NaiveDateTime.compare(~N[2016-04-16 13:30:15], ~N[2016-04-28 16:19:25]) :lt iex> NaiveDateTime.compare(~N[2016-04-16 13:30:15.1], ~N[2016-04-16 13:30:15.01]) :gt
Эта функция также может использоваться для сравнения DateTime без информации о часовом поясе:
iex> dt = %DateTime{year: 2000, month: 2, day: 29, zone_abbr: "CET",
...> hour: 23, minute: 0, second: 7, microsecond: {0, 0},
...> utc_offset: 3600, std_offset: 0, time_zone: "Europe/Warsaw"}
iex> NaiveDateTime.compare(dt, ~N[2000-02-29 23:00:07])
:eq
iex> NaiveDateTime.compare(dt, ~N[2000-01-29 23:00:07])
:gt
iex> NaiveDateTime.compare(dt, ~N[2000-03-29 23:00:07])
:lt convert(naive_datetime, calendar)Источник
@spec convert(Calendar.naive_datetime(), Calendar.calendar()) ::
{:ok, t()} | {:error, :incompatible_calendars} Преобразует заданное naive_datetime из одного календаря в другой.
Если невозможен однозначный перевод между календарями (см. Calendar.compatible_calendars?/2), возвращается кортеж {:error, :incompatible_calendars}.
Примеры
Представьте себе реализацию Calendar.Holocene, календаря, основанного на григорианском календаре, который добавляет ровно 10 000 лет к текущему григорианскому году:
iex> NaiveDateTime.convert(~N[2000-01-01 13:30:15], Calendar.Holocene)
{:ok, %NaiveDateTime{calendar: Calendar.Holocene, year: 12000, month: 1, day: 1,
hour: 13, minute: 30, second: 15, microsecond: {0, 0}}} convert!(naive_datetime, calendar)Источник
@spec convert!(Calendar.naive_datetime(), Calendar.calendar()) :: t()
Преобразует заданное naive_datetime из одного календаря в другой.
Если невозможен однозначный перевод между календарями (см. Calendar.compatible_calendars?/2), генерируется исключение ArgumentError.
Примеры
Представьте себе реализацию Calendar.Holocene, календаря, основанного на григорианском календаре, который добавляет ровно 10 000 лет к текущему григорианскому году:
iex> NaiveDateTime.convert!(~N[2000-01-01 13:30:15], Calendar.Holocene)
%NaiveDateTime{calendar: Calendar.Holocene, year: 12000, month: 1, day: 1,
hour: 13, minute: 30, second: 15, microsecond: {0, 0}} diff(naive_datetime1, naive_datetime2, unit \\ :second)Источник
@spec diff( Calendar.naive_datetime(), Calendar.naive_datetime(), :day | :hour | :minute | System.time_unit() ) :: integer()
Вычисляет разницу между naive_datetime2 и naive_datetime1.
Результат может быть возвращён в любых :day, :hour, :minute, или любой unit доступной из System.time_unit/0. Единица измерения определяется в соответствии с Calendar.ISO и по умолчанию равна :second.
Дробные результаты не поддерживаются и усекаются.
Примеры
iex> NaiveDateTime.diff(~N[2014-10-02 00:29:12], ~N[2014-10-02 00:29:10]) 2 iex> NaiveDateTime.diff(~N[2014-10-02 00:29:12], ~N[2014-10-02 00:29:10], :microsecond) 2_000_000 iex> NaiveDateTime.diff(~N[2014-10-02 00:29:10.042], ~N[2014-10-02 00:29:10.021]) 0 iex> NaiveDateTime.diff(~N[2014-10-02 00:29:10.042], ~N[2014-10-02 00:29:10.021], :millisecond) 21 iex> NaiveDateTime.diff(~N[2014-10-02 00:29:10], ~N[2014-10-02 00:29:12]) -2 iex> NaiveDateTime.diff(~N[-0001-10-02 00:29:10], ~N[-0001-10-02 00:29:12]) -2
Также можно вычислить разницу в днях, часах или минутах:
iex> NaiveDateTime.diff(~N[2014-10-10 00:29:10], ~N[2014-10-02 00:29:10], :day) 8 iex> NaiveDateTime.diff(~N[2014-10-02 12:29:10], ~N[2014-10-02 00:29:10], :hour) 12 iex> NaiveDateTime.diff(~N[2014-10-02 00:39:10], ~N[2014-10-02 00:29:10], :minute) 10
Но неполные дни округляются до нуля:
iex> NaiveDateTime.diff(~N[2014-10-10 00:29:09], ~N[2014-10-02 00:29:10], :day) 7
from_erl(tuple, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)Источник
@spec from_erl(:calendar.datetime(), Calendar.microsecond(), Calendar.calendar()) ::
{:ok, t()} | {:error, atom()} Преобразует кортеж Erlang даты и времени в структуру NaiveDateTime.
Попытка преобразования некорректной даты ISO календаря приведет к ошибке.
Примеры
iex> NaiveDateTime.from_erl({{2000, 1, 1}, {13, 30, 15}})
{:ok, ~N[2000-01-01 13:30:15]}
iex> NaiveDateTime.from_erl({{2000, 1, 1}, {13, 30, 15}}, {5000, 3})
{:ok, ~N[2000-01-01 13:30:15.005]}
iex> NaiveDateTime.from_erl({{2000, 13, 1}, {13, 30, 15}})
{:error, :invalid_date}
iex> NaiveDateTime.from_erl({{2000, 13, 1}, {13, 30, 15}})
{:error, :invalid_date} from_erl!(tuple, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)Источник
@spec from_erl!(:calendar.datetime(), Calendar.microsecond(), Calendar.calendar()) :: t()
Преобразует кортеж Erlang даты и времени в структуру NaiveDateTime структуру.
Вызывает исключение, если дата и время некорректны. Попытка преобразования некорректной даты ISO календаря приведет к ошибке.
Примеры
iex> NaiveDateTime.from_erl!({{2000, 1, 1}, {13, 30, 15}})
~N[2000-01-01 13:30:15]
iex> NaiveDateTime.from_erl!({{2000, 1, 1}, {13, 30, 15}}, {5000, 3})
~N[2000-01-01 13:30:15.005]
iex> NaiveDateTime.from_erl!({{2000, 13, 1}, {13, 30, 15}})
** (ArgumentError) cannot convert {{2000, 13, 1}, {13, 30, 15}} to naive datetime, reason: :invalid_date from_gregorian_seconds(seconds, arg \\ {0, 0}, calendar \\ Calendar.ISO)Источник
@spec from_gregorian_seconds(integer(), Calendar.microsecond(), Calendar.calendar()) :: t()
Преобразует заданное количество григорианских секунд в структуру NaiveDateTime.
Примеры
iex> NaiveDateTime.from_gregorian_seconds(1)
~N[0000-01-01 00:00:01]
iex> NaiveDateTime.from_gregorian_seconds(63_755_511_991, {5000, 3})
~N[2020-05-01 00:26:31.005]
iex> NaiveDateTime.from_gregorian_seconds(-1)
~N[-0001-12-31 23:59:59] from_iso8601(string, calendar \\ Calendar.ISO)Источник
@spec from_iso8601(String.t(), Calendar.calendar()) :: {:ok, t()} | {:error, atom()} Парсит расширенный формат «Дата и время суток», описанный в ISO 8601:2019.
Смещение часового пояса может быть включено в строку, но оно просто отброшено, поскольку информация о часовом поясе не включается в naive datetime.
Как указано в стандарте, разделитель «T» может быть опущен, если это желательно, так как это не создает неоднозначности в этой функции.
Обратите внимание, что високосные секунды не поддерживаются встроенным Calendar.ISO.
Примеры
iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:07")
{:ok, ~N[2015-01-23 23:50:07]}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07")
{:ok, ~N[2015-01-23 23:50:07]}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07Z")
{:ok, ~N[2015-01-23 23:50:07]}
iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:07.0")
{:ok, ~N[2015-01-23 23:50:07.0]}
iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:07,0123456")
{:ok, ~N[2015-01-23 23:50:07.012345]}
iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:07.0123456")
{:ok, ~N[2015-01-23 23:50:07.012345]}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07.123Z")
{:ok, ~N[2015-01-23 23:50:07.123]}
iex> NaiveDateTime.from_iso8601("2015-01-23P23:50:07")
{:error, :invalid_format}
iex> NaiveDateTime.from_iso8601("2015:01:23 23-50-07")
{:error, :invalid_format}
iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:07A")
{:error, :invalid_format}
iex> NaiveDateTime.from_iso8601("2015-01-23 23:50:61")
{:error, :invalid_time}
iex> NaiveDateTime.from_iso8601("2015-01-32 23:50:07")
{:error, :invalid_date}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07.123+02:30")
{:ok, ~N[2015-01-23 23:50:07.123]}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07.123+00:00")
{:ok, ~N[2015-01-23 23:50:07.123]}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07.123-02:30")
{:ok, ~N[2015-01-23 23:50:07.123]}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07.123-00:00")
{:error, :invalid_format}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07.123-00:60")
{:error, :invalid_format}
iex> NaiveDateTime.from_iso8601("2015-01-23T23:50:07.123-24:00")
{:error, :invalid_format} from_iso8601!(string, calendar \\ Calendar.ISO)Источник
@spec from_iso8601!(String.t(), Calendar.calendar()) :: t()
Парсит расширенный формат «Дата и время суток», описанный в ISO 8601:2019.
Вызывает исключение, если формат некорректен.
Примеры
iex> NaiveDateTime.from_iso8601!("2015-01-23T23:50:07.123Z")
~N[2015-01-23 23:50:07.123]
iex> NaiveDateTime.from_iso8601!("2015-01-23T23:50:07,123Z")
~N[2015-01-23 23:50:07.123]
iex> NaiveDateTime.from_iso8601!("2015-01-23P23:50:07")
** (ArgumentError) cannot parse "2015-01-23P23:50:07" as naive datetime, reason: :invalid_format local_now(calendar \\ Calendar.ISO)Источник
@spec local_now(Calendar.calendar()) :: t()
Возвращает «локальное время» для машины, на которой выполняется программа Elixir.
ПРЕДУПРЕЖДЕНИЕ: Эта функция может привести к скрытым ошибкам. Она зависит от конфигурации часового пояса во время выполнения. Это может быть изменено и установлено на часовой пояс, в котором есть переходы на летнее/зимнее время.
Эта функция может использоваться для отображения текущего времени в конфигурации часового пояса на машине. Примером является настольная программа, отображающая часы пользователю. Для других целей использование этой функции, вероятно, нежелательно.
В большинстве случаев используйте DateTime.now/2 или DateTime.utc_now/1 вместо этого.
Не включает дробные секунды.
Примеры
iex> naive_datetime = NaiveDateTime.local_now() iex> naive_datetime.year >= 2019 true
new(date, time)Источник
@spec new(Date.t(), Time.t()) :: {:ok, t()} Создает дату и время без учета часового пояса из структур даты и времени.
Примеры
iex> NaiveDateTime.new(~D[2010-01-13], ~T[23:00:07.005])
{:ok, ~N[2010-01-13 23:00:07.005]} new(year, month, day, hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)Источник
@spec new(
Calendar.year(),
Calendar.month(),
Calendar.day(),
Calendar.hour(),
Calendar.minute(),
Calendar.second(),
Calendar.microsecond() | non_neg_integer(),
Calendar.calendar()
) :: {:ok, t()} | {:error, atom()} Создает новую дату и время ISO без учета часового пояса.
Ожидаются целочисленные значения. Возвращает {:ok, naive_datetime} , если каждое значение находится в соответствующем диапазоне, возвращает {:error, reason} в противном случае.
Примеры
iex> NaiveDateTime.new(2000, 1, 1, 0, 0, 0)
{:ok, ~N[2000-01-01 00:00:00]}
iex> NaiveDateTime.new(2000, 13, 1, 0, 0, 0)
{:error, :invalid_date}
iex> NaiveDateTime.new(2000, 2, 29, 0, 0, 0)
{:ok, ~N[2000-02-29 00:00:00]}
iex> NaiveDateTime.new(2000, 2, 30, 0, 0, 0)
{:error, :invalid_date}
iex> NaiveDateTime.new(2001, 2, 29, 0, 0, 0)
{:error, :invalid_date}
iex> NaiveDateTime.new(2000, 1, 1, 23, 59, 59, {0, 1})
{:ok, ~N[2000-01-01 23:59:59.0]}
iex> NaiveDateTime.new(2000, 1, 1, 23, 59, 59, 999_999)
{:ok, ~N[2000-01-01 23:59:59.999999]}
iex> NaiveDateTime.new(2000, 1, 1, 24, 59, 59, 999_999)
{:error, :invalid_time}
iex> NaiveDateTime.new(2000, 1, 1, 23, 60, 59, 999_999)
{:error, :invalid_time}
iex> NaiveDateTime.new(2000, 1, 1, 23, 59, 60, 999_999)
{:error, :invalid_time}
iex> NaiveDateTime.new(2000, 1, 1, 23, 59, 59, 1_000_000)
{:error, :invalid_time}
iex> NaiveDateTime.new(2000, 1, 1, 23, 59, 59, {0, 1}, Calendar.ISO)
{:ok, ~N[2000-01-01 23:59:59.0]} new!(date, time)Source
@spec new!(Date.t(), Time.t()) :: t()
Создаёт объект naive datetime из структур date и time.
Примеры
iex> NaiveDateTime.new!(~D[2010-01-13], ~T[23:00:07.005]) ~N[2010-01-13 23:00:07.005]
new!(year, month, day, hour, minute, second, microsecond \\ {0, 0}, calendar \\ Calendar.ISO)Source
@spec new!( Calendar.year(), Calendar.month(), Calendar.day(), Calendar.hour(), Calendar.minute(), Calendar.second(), Calendar.microsecond() | non_neg_integer(), Calendar.calendar() ) :: t()
Создаёт новый объект ISO naive datetime.
Ожидаются все значения в виде целых чисел. Возвращает naive_datetime если каждое значение попадает в соответствующий диапазон, иначе генерирует исключение, если время или дата некорректны.
Примеры
iex> NaiveDateTime.new!(2000, 1, 1, 0, 0, 0)
~N[2000-01-01 00:00:00]
iex> NaiveDateTime.new!(2000, 2, 29, 0, 0, 0)
~N[2000-02-29 00:00:00]
iex> NaiveDateTime.new!(2000, 1, 1, 23, 59, 59, {0, 1})
~N[2000-01-01 23:59:59.0]
iex> NaiveDateTime.new!(2000, 1, 1, 23, 59, 59, 999_999)
~N[2000-01-01 23:59:59.999999]
iex> NaiveDateTime.new!(2000, 1, 1, 23, 59, 59, {0, 1}, Calendar.ISO)
~N[2000-01-01 23:59:59.0]
iex> NaiveDateTime.new!(2000, 1, 1, 24, 59, 59, 999_999)
** (ArgumentError) cannot build naive datetime, reason: :invalid_time to_date(map)Source
@spec to_date(Calendar.naive_datetime()) :: Date.t()
Преобразует NaiveDateTime в Date.
Так как Date не содержит информацию о времени, данные будут потеряны при преобразовании.
Примеры
iex> NaiveDateTime.to_date(~N[2002-01-13 23:00:07]) ~D[2002-01-13]
to_erl(naive_datetime)Source
@spec to_erl(Calendar.naive_datetime()) :: :calendar.datetime()
Преобразует структуру NaiveDateTime в кортеж Erlang datetime.
Поддерживает преобразование только naive datetime в календаре ISO, попытка преобразования из других календарей приведёт к исключению.
ВНИМАНИЕ: Может произойти потеря точности, так как кортежи Erlang datetime хранят только час/минуту/секунду.
Примеры
iex> NaiveDateTime.to_erl(~N[2000-01-01 13:30:15])
{{2000, 1, 1}, {13, 30, 15}}
Данная функция также может быть использована для преобразования DateTime в кортеж Erlang datetime без информации о часовом поясе:
iex> dt = %DateTime{year: 2000, month: 2, day: 29, zone_abbr: "CET",
...> hour: 23, minute: 0, second: 7, microsecond: {0, 0},
...> utc_offset: 3600, std_offset: 0, time_zone: "Europe/Warsaw"}
iex> NaiveDateTime.to_erl(dt)
{{2000, 2, 29}, {23, 00, 07}} to_gregorian_seconds(map)Source
@spec to_gregorian_seconds(Calendar.naive_datetime()) ::
{integer(), non_neg_integer()} Преобразует структуру NaiveDateTime в количество грегорианских секунд и микросекунд.
Примеры
iex> NaiveDateTime.to_gregorian_seconds(~N[0000-01-01 00:00:01])
{1, 0}
iex> NaiveDateTime.to_gregorian_seconds(~N[2020-05-01 00:26:31.005])
{63_755_511_991, 5000} to_iso8601(naive_datetime, format \\ :extended)Source
@spec to_iso8601(Calendar.naive_datetime(), :basic | :extended) :: String.t()
Преобразует заданную naive datetime в формат ISO 8601:2019.
По умолчанию, NaiveDateTime.to_iso8601/2 возвращает naive datetime в формате "extended" для удобочитаемости. Также поддерживается формат "basic" через опцию :basic.
Поддерживает преобразование только naive datetime в календаре ISO, попытка преобразования из других календарей приведёт к исключению.
Примеры
iex> NaiveDateTime.to_iso8601(~N[2000-02-28 23:00:13]) "2000-02-28T23:00:13" iex> NaiveDateTime.to_iso8601(~N[2000-02-28 23:00:13.001]) "2000-02-28T23:00:13.001" iex> NaiveDateTime.to_iso8601(~N[2000-02-28 23:00:13.001], :basic) "20000228T230013.001"
Эта функция также может быть использована для преобразования DateTime в ISO 8601 без информации о часовом поясе:
iex> dt = %DateTime{year: 2000, month: 2, day: 29, zone_abbr: "CET",
...> hour: 23, minute: 0, second: 7, microsecond: {0, 0},
...> utc_offset: 3600, std_offset: 0, time_zone: "Europe/Warsaw"}
iex> NaiveDateTime.to_iso8601(dt)
"2000-02-29T23:00:07" to_string(naive_datetime)Source
@spec to_string(Calendar.naive_datetime()) :: String.t()
Преобразует заданную naive datetime в строку в соответствии с её календарем.
Примеры
iex> NaiveDateTime.to_string(~N[2000-02-28 23:00:13]) "2000-02-28 23:00:13" iex> NaiveDateTime.to_string(~N[2000-02-28 23:00:13.001]) "2000-02-28 23:00:13.001" iex> NaiveDateTime.to_string(~N[-0100-12-15 03:20:31]) "-0100-12-15 03:20:31"
Эта функция также может быть использована для преобразования DateTime в строку без информации о часовом поясе:
iex> dt = %DateTime{year: 2000, month: 2, day: 29, zone_abbr: "CET",
...> hour: 23, minute: 0, second: 7, microsecond: {0, 0},
...> utc_offset: 3600, std_offset: 0, time_zone: "Europe/Warsaw"}
iex> NaiveDateTime.to_string(dt)
"2000-02-29 23:00:07" to_time(map)Source
@spec to_time(Calendar.naive_datetime()) :: Time.t()
Преобразует NaiveDateTime в Time.
Так как Time не содержит информации о дате, данные будут потеряны при преобразовании.
Примеры
iex> NaiveDateTime.to_time(~N[2002-01-13 23:00:07]) ~T[23:00:07]
truncate(naive_datetime, precision)Source
@spec truncate(t(), :microsecond | :millisecond | :second) :: t()
Возвращает заданную naive datetime с микросекундным полем, усечённым до заданной точности (:microsecond, :millisecond или :second).
Заданная naive datetime возвращается неизменной, если она уже имеет меньшую точность, чем заданная точность.
Примеры
iex> NaiveDateTime.truncate(~N[2017-11-06 00:23:51.123456], :microsecond) ~N[2017-11-06 00:23:51.123456] iex> NaiveDateTime.truncate(~N[2017-11-06 00:23:51.123456], :millisecond) ~N[2017-11-06 00:23:51.123] iex> NaiveDateTime.truncate(~N[2017-11-06 00:23:51.123456], :second) ~N[2017-11-06 00:23:51]
utc_now(calendar \\ Calendar.ISO)Source
@spec utc_now(Calendar.calendar()) :: t()
Возвращает текущую naive datetime в UTC.
Предпочтительно использовать DateTime.utc_now/0 когда это возможно, так как в отличие от NaiveDateTime, она сохранит информацию о часовом поясе.
Примеры
iex> naive_datetime = NaiveDateTime.utc_now() iex> naive_datetime.year >= 2016 true
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.14.1/NaiveDateTime.html