Spec-Zone.ru › Elixir 1.3

Время

Структура Time и функции.

Структура Time содержит поля hour, minute, second и microseconds. Новые времена можно создать с помощью функции new/4 или с помощью сигила ~T.

iex> ~T[23:00:07.001]
~T[23:00:07.001]

И new/4, и сигил возвращают структуру, где поля времени можно получить напрямую:

iex> time = ~T[23:00:07.001]
iex> time.hour
23
iex> time.microsecond
{1000, 3}

Разработчики должны избегать непосредственного создания структуры Time и вместо этого полагаться на функции, предоставляемые этим модулем, а также на функции сторонних библиотек календаря.

Краткое описание

Типы

t()

Функции

from_erl(arg, microsecond \\ {0, 0})

Преобразует кортеж времени Erlang в структуру Time.

from_erl!(tuple, microsecond \\ {0, 0})

Преобразует кортеж времени Erlang в структуру Time.

from_iso8601(arg)

Парсит расширенный формат «Локальное время», описанный в ISO8601:2004

from_iso8601!(string)

Парсит расширенный формат «Локальное время», описанный в ISO8601:2004

new(hour, minute, second, microsecond \\ {0, 0})

Создаёт новое время

to_erl(time)

Преобразует структуру Time в кортеж времени Erlang.

to_iso8601(time)

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

to_string(time)

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

Типы

t()

t() :: %Time{hour: Calendar.hour, microsecond: Calendar.microsecond, minute: Calendar.minute, second: Calendar.second}

Функции

from_erl(arg, microsecond \\ {0, 0})

from_erl(:calendar.time, Calendar.microsecond) ::
  {:ok, Time.t} |
  {:error, atom}

Преобразует кортеж времени Erlang в структуру Time.

Примеры

iex> Time.from_erl({23, 30, 15}, {5000, 3})
{:ok, ~T[23:30:15.005]}
iex> Time.from_erl({24, 30, 15})
{:error, :invalid_time}

from_erl!(tuple, microsecond \\ {0, 0})

from_erl!(:calendar.time, Calendar.microsecond) ::
  Time.t |
  no_return

Преобразует кортеж времени Erlang в структуру Time.

Примеры

iex> Time.from_erl!({23, 30, 15})
~T[23:30:15]
iex> Time.from_erl!({23, 30, 15}, {5000, 3})
~T[23:30:15.005]
iex> Time.from_erl!({24, 30, 15})
** (ArgumentError) cannot convert {24, 30, 15} to time, reason: :invalid_time

from_iso8601(arg)

from_iso8601(String.t) :: {:ok, Time.t} | {:error, atom}

Парсит расширенный формат «Локальное время», описанный в ISO8601:2004.

Смещение часового пояса может быть включено в строку, но будет просто проигнорировано, так как такая информация не включена во времени.

Как указано в стандарте, разделитель «T» может быть опущен по желанию, так как в этой функции нет неоднозначности.

Представления времени с пониженной точностью не поддерживаются.

Примеры

iex> Time.from_iso8601("23:50:07")
{:ok, ~T[23:50:07]}
iex> Time.from_iso8601("23:50:07Z")
{:ok, ~T[23:50:07]}
iex> Time.from_iso8601("T23:50:07Z")
{:ok, ~T[23:50:07]}

iex> Time.from_iso8601("23:50:07.0123456")
{:ok, ~T[23:50:07.012345]}
iex> Time.from_iso8601("23:50:07.123Z")
{:ok, ~T[23:50:07.123]}

iex> Time.from_iso8601("2015:01:23 23-50-07")
{:error, :invalid_format}
iex> Time.from_iso8601("23:50:07A")
{:error, :invalid_format}
iex> Time.from_iso8601("23:50:07.")
{:error, :invalid_format}
iex> Time.from_iso8601("23:50:61")
{:error, :invalid_time}

from_iso8601!(string)

from_iso8601!(String.t) :: Time.t | no_return

Парсит расширенный формат «Локальное время», описанный в ISO8601:2004.

Вызывает исключение, если формат неверный.

Примеры

iex> Time.from_iso8601!("23:50:07.123Z")
~T[23:50:07.123]
iex> Time.from_iso8601!("2015:01:23 23-50-07")
** (ArgumentError) cannot parse "2015:01:23 23-50-07" as time, reason: :invalid_format

new(hour, minute, second, microsecond \\ {0, 0})

new(Calendar.hour, Calendar.minute, Calendar.second, Calendar.microsecond) ::
  {:ok, Time.t} |
  {:error, atom}

Создаёт новое время.

Ожидаются все значения в виде целых чисел. Возвращает {:ok, time}, если каждое значение входит в соответствующий диапазон, возвращает {:error, reason}, в противном случае.

Обратите внимание, что время может иметь 60 секунд в случае високосных секунд.

Примеры

iex> Time.new(0, 0, 0, 0)
{:ok, ~T[00:00:00.000000]}
iex> Time.new(23, 59, 59, 999_999)
{:ok, ~T[23:59:59.999999]}
iex> Time.new(23, 59, 60, 999_999)
{:ok, ~T[23:59:60.999999]}

# Time with microseconds and their precision
iex> Time.new(23, 59, 60, {10_000, 2})
{:ok, ~T[23:59:60.01]}

iex> Time.new(24, 59, 59, 999_999)
{:error, :invalid_time}
iex> Time.new(23, 60, 59, 999_999)
{:error, :invalid_time}
iex> Time.new(23, 59, 61, 999_999)
{:error, :invalid_time}
iex> Time.new(23, 59, 59, 1_000_000)
{:error, :invalid_time}

to_erl(time)

to_erl(Time.t) :: :calendar.time

Преобразует структуру Time в кортеж времени Erlang.

ВНИМАНИЕ: Может произойти потеря точности, так как кортежи времени Erlang содержат только часы/минуты/секунды.

Примеры

iex> Time.to_erl(~T[23:30:15.999])
{23, 30, 15}

to_iso8601(time)

to_iso8601(Time.t) :: String.t

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

Примеры

iex> Time.to_iso8601(~T[23:00:13])
"23:00:13"

iex> Time.to_iso8601(~T[23:00:13.001])
"23:00:13.001"

to_string(time)

to_string(Time.t) :: String.t

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

Примеры

iex> Time.to_string(~T[23:00:00])
"23:00:00"
iex> Time.to_string(~T[23:00:00.001])
"23:00:00.001"
iex> Time.to_string(~T[23:00:00.123456])
"23:00:00.123456"

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.3.4/Time.html

Spec-Zone.ru

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