在Elixir中获取当前的date和时间

这似乎是一个非常愚蠢的问题,但如何得到并显示当前的date或时间在药剂? 我试着通过文档,但找不到任何东西。 我需要使用Erlang函数吗?

要更具体地回答您的问题(尽pipe我非常感谢Onoriobuild议使用Timex!),您可以使用:calendar.universal_time():calendar.local_time()从Erlang标准库中获取当前date和时间。 在calendar模块中使用Erlang的datetimetypes有许多有用的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和时间的模块套件: DateDateTime 。 你可以使用它的函数获取当前的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/1DateTime.to_time/1从中获取特定的date和时间值。

获取unix时间戳

 DateTime.to_unix(DateTime.utc_now)