在Elixir中获取当前的date和时间
这似乎是一个非常愚蠢的问题,但如何得到并显示当前的date或时间在药剂? 我试着通过文档,但找不到任何东西。 我需要使用Erlang函数吗?
要更具体地回答您的问题(尽pipe我非常感谢Onoriobuild议使用Timex!),您可以使用:calendar.universal_time()
或:calendar.local_time()
从Erlang标准库中获取当前date和时间。 在calendar
模块中使用Erlang的datetime
types有许多有用的function,但是它们有一定的局限性,并没有提供任何parsing或格式化date的东西,这就是Timex进入的地方。
你可以使用DateTime.utc_now/0
来获取utc DateTime,如果你可以使用它
http://elixir-lang.org/docs/master/elixir/DateTime.html#utc_now/0
从Erlang 19.1:
:os.system_time(:millisecond)
从Erlang 18:
:os.system_time(:milli_seconds)
给出当前的UNIX时间戳UTC。
感谢@HenrikN链接博客文章http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
我认为你最好的select是使用Elixir的Paul Schoenfelder(又名BitWalker)timex库。 lib在这里: https : //github.com/bitwalker/timex ,你可以从hex.pm https://hex.pm/packages/timex得到包。; 保罗好心地提供了一个很好的解释,如何在github回购的readme页面上使用库。
你可以打电话给本地的Erlang库,但是我认为Paul在处理Elixir的时候更好。
您也可以使用:os.timestamp\0
,它从UTC返回{megaseconds, seconds, microseconds}
。 :os.timestamp |> :calendar.now_to_datetime
现在将以erlang标准{{YYYY, MM, DD}, {HH, MM, SS}}
格式给您。
如果您需要处理夏令时或时区,我为此制作了一个图书馆: 日历 。
为了获得当前时间,您可以在洛杉矶当前时间使用Calendar.DateTime.now("America/Los_Angeles")
,或使用UTC中当前时间的Calendar.DateTime.now_utc
。
这取决于你想要的格式。
您可以使用Elixir的Erlang标准库中的任何函数。 传统上,你会得到now/0
函数的时间:
iex(1)> :erlang.now {1487, 549978, 29683}
但是,由于Erlang / OTP 18,该函数被弃用,而偏向于具有更高精度和控制的API 。 这个新的API的主要接口是os:system_time/0
函数,它在系统定义的单元中返回历元时间:
iex(2)> :os.system_time 1487550102372148000
您可以使用system_time/1
来请求一个特定的单元,但是:
iex(3)> :os.system_time(:millisecond) 1487549663928
从Elixir 1.2开始,这些function在本地System
模块中也可用:
iex(4)> System.system_time(:second) 1487549711
对于一个更友好,但仍然是Elixir本机界面,使用calendar
模块,它会给你元组:
iex(5)> :calendar.universal_time {{2017, 2, 20}, {0, 26, 47}}
从1.3开始,Elixir也有自己的操作date和时间的模块套件: Date
和DateTime
。 你可以使用它的函数获取当前的date或时间,如下所示:
iex(6)> Date.utc_today ~D[2017-02-20] iex(7)> DateTime.utc_now %DateTime{calendar: Calendar.ISO, day: 20, hour: 0, microsecond: {776208, 6}, minute: 27, month: 2, second: 51, std_offset: 0, time_zone: "Etc/UTC", utc_offset: 0, year: 2017, zone_abbr: "UTC"}
date时间模块
使用Elixir提供的官方模块DateTime
:
DateTime.utc_now
然后,您也可以使用DateTime.to_date/1
和DateTime.to_time/1
从中获取特定的date和时间值。
获取unix时间戳
DateTime.to_unix(DateTime.utc_now)