这似乎是一个非常愚蠢的问题,但是如何获得并显示Elixir中的当前日期或时间?我试过浏览文档但找不到任何东西.我需要使用Erlang功能吗?
1> bitwalker..:
更具体地回答您的问题(尽管我非常感谢Onorio建议使用Timex!),您可以使用:calendar.universal_time()
或从Erlang标准库中获取当前日期和时间:calendar.local_time()
.datetime
在calendar
模块中使用Erlang的类型有许多有用的函数,但是它们有些限制,并且没有为解析或格式化日期提供任何东西,这是Timex的用武之地.
2> Jimmar..:
您可以使用DateTime.utc_now/0
获取UTC DateTime.
这是Elixir 1.3的正确答案
3> TalkLittle..:
来自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
4> Sheharyar..:
NaiveDateTime
如果您不关心时区并且只想要纯日期和时间,请使用NaiveDateTime
:
NaiveDateTime.utc_now
# => ~N[2017-11-30 20:49:54.660724]
约会时间
如果您还需要时区详细信息,请使用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
从日期时间结构中获取特定的日期和时间值.
5> Onorio Caten..:
我认为你最好的选择是使用Paul Schoenfelder(又名BitWalker)的时间码库来制作Elixir.lib就在这里:https://github.com/bitwalker/timex你可以从hex.pm https://hex.pm/packages/timex获取软件包.Paul很好地解释了如何在该github repo的自述页面上使用该库.
您可以调用本机Erlang库,但我认为Paul的lib在处理Elixir时更胜一筹.
感谢Onorio的推荐!对于任何阅读本文的人,我都非常愿意参与,这样我们就可以让Timex成为Elixir中日期/时间的图书馆,也许有一天将它合并到Elixir标准库中,如果它应该达到标准.如果您有兴趣帮助,请向我发送消息或潜入GitHub上的问题跟踪器并发送拉动请求!
6> Mark Reed..:
这取决于你想要的格式.
您可以使用Elixir的Erlang标准库中的任何函数.传统上,您可以使用该now/0
功能获得时间:
iex(1)> :erlang.now
{1487, 549978, 29683}
这代表time_t
1,487,549,978.29683,这是2017年2月20日星期一午夜UTC之后19分38.29683秒.
但是,由于Erlang/OTP 18,该函数已被弃用; 其中一个原因是Erlang保证每次调用都会增加返回值.如果在机器上的紧密循环中调用它足够快,每微秒调用一次以上,则返回的时间戳将提前实时.
替换是一种具有更高精度和控制的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以来,这些功能也可以在本机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
和DateTime
.您可以使用其功能来获取当前日期或时间,如下所示:
iex(6)> Date.utc_today
~D[2017-02-20]
iex(7)> DateTime.utc_now
#DateTime<2017-02-20 00:27:51.776208Z>
7> G Amini..:
您也可以使用:os.timestamp\0
,{megaseconds, seconds, microseconds}
从UTC 返回.:os.timestamp |> :calendar.now_to_datetime
现在将以erlang标准{{YYYY, MM, DD}, {HH, MM, SS}}
格式给你.
并将其转换为POSIX/UNIX时间戳:http://michal.muskala.eu/2015/07/30/unix-timestamps-in-elixir.html
8> Lau..:
如果您需要处理夏令时或时区,我为此专门制作了一个库:Calendar。
要获取当前时间,您可以使用例如Calendar.DateTime.now("America/Los_Angeles")
洛杉矶Calendar.DateTime.now_utc
的当前时间或UTC的当前时间。