Это кажется действительно глупым вопросом, но как получить и отобразить текущую дату или время в Elixir? Я попытался просмотреть документы, но ничего не нашел. Нужно ли мне использовать функцию Erlang?
83
Это кажется действительно глупым вопросом, но как получить и отобразить текущую дату или время в Elixir? Я попытался просмотреть документы, но ничего не нашел. Нужно ли мне использовать функцию Erlang?
Чтобы ответить на ваш вопрос более конкретно (хотя я очень ценю рекомендацию Onorio использовать Timex!), Вы можете получить текущую дату и время из стандартной библиотеки Erlang, используя :calendar.universal_time()
или :calendar.local_time()
. В модуле есть ряд полезных функций для работы с datetime
типом Erlang calendar
, но они несколько ограничены и не предоставляют ничего для синтаксического анализа или форматирования дат, в чем и вступает Timex.
Вы можете использовать
DateTime.utc_now/0
для получения UTC DateTime.источник
Из Erlang 19.1:
Из Erlang 18:
Предоставляет текущую временную метку UNIX в формате UTC.
Спасибо @HenrikN за ссылку на сообщение в блоге http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
источник
NaiveDateTime
Если вам не важен часовой пояс и вам нужны только дата и время в чистом виде, используйте
NaiveDateTime
:NaiveDateTime.utc_now # => ~N[2017-11-30 20:49:54.660724]
DateTime
Если вам также нужны данные о
DateTime
часовом поясе , используйте , который также вернет такие вещи, как имя часового пояса, смещение UTC, смещение STD и аббревиатуру часового пояса:DateTime.utc_now # => %DateTime{calendar: Calendar.ISO, day: 30, hour: 20, microsecond: {667345, 6}, minute: 51, month: 11, second: 58, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC"}
Затем вы также можете вызвать
to_date/1
иto_time/1
из этих модулей, чтобы получить конкретные значения даты и времени из структур datetime.источник
Я думаю, что вам лучше всего использовать библиотеку timex Пола Шенфельдера (также известную как BitWalker) для Elixir. Библиотека находится здесь: https://github.com/bitwalker/timex, и вы можете получить пакет из hex.pm https://hex.pm/packages/timex . Пол любезно предоставил хорошее объяснение того, как использовать библиотеку на странице readme этого репозитория github.
Вы можете вызывать собственные библиотеки Erlang, но я думаю, что библиотека Пола лучше, когда вы имеете дело с Elixir.
источник
Это зависит от того, в каком формате вы его хотите.
Вы можете использовать любую функцию из стандартной библиотеки Erlang из Elixir. Обычно вы получаете время с помощью
now/0
функции:Это составляет
time_t
1,487,549,978,29683, что составляет 19 минут 38,29683 секунды после полуночи по всемирному координированному времени в понедельник, 20 февраля 2017 года.Однако, начиная с Erlang / OTP 18, эта функция устарела; Одна из причин заключается в том, что Erlang гарантирует, что возвращаемое значение будет увеличиваться с каждым вызовом. Если вызвать его в жестком цикле на машине, достаточно быстро, чтобы вызывать его чаще, чем один раз в микросекунду, возвращенная временная метка будет опережать реальное время.
Замена - API с большей точностью и контролем . Основным интерфейсом к этому новому API является
os:system_time/0
функция, которая возвращает время эпохи в единицах измерения, определенных системой:Однако вы можете запросить конкретную единицу с помощью
system_time/1
:Начиная с Elixir 1.2, эти функции также доступны в собственном
System
модуле :Для более дружелюбного, но все же родного интерфейса Elixir используйте
calendar
модуль, который предоставит вам кортежи:Начиная с версии 1.3, в Elixir есть собственный набор модулей для управления датой и временем:
Date
иDateTime
. Вы можете использовать его функции для получения текущей даты или времени следующим образом:источник
Чтобы получить количество миллисекунд (временная метка Unix):
источник
Вы также можете использовать
:os.timestamp\0
, который возвращается{megaseconds, seconds, microseconds}
из UTC.:os.timestamp |> :calendar.now_to_datetime
даст вам теперь в стандартном{{YYYY, MM, DD}, {HH, MM, SS}}
формате erlang .источник
Если вам нужно иметь дело с летним временем или часовыми поясами, я сделал для этого библиотеку: Календарь .
Чтобы получить текущее время, вы должны использовать, например,
Calendar.DateTime.now("America/Los_Angeles")
для текущего времени в Лос-Анджелесе илиCalendar.DateTime.now_utc
для текущего времени в UTC.источник
Чтобы получить временную метку unix
источник
Что ж, Timex обычно приходит на помощь, однако некоторые из приведенных ниже уловок могут помочь:
источник