Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Elixir中获取当前日期和/或时间_Elixir - Fatal编程技术网

在Elixir中获取当前日期和/或时间

在Elixir中获取当前日期和/或时间,elixir,Elixir,这似乎是一个非常愚蠢的问题,但如何在Elixir中获取并显示当前日期或时间?我试过了,但什么也找不到。我需要使用Erlang函数吗?我认为最好的选择是使用Paul Schoenfelder(又名BitWalker)的timex库来获得长生不老药。lib在这里:您可以从hex.pm获取包。Paul在github repo的自述页面上很好地解释了如何使用该库 您可以调用本地Erlang库,但我认为Paul的库在处理Elixir时更为优越。要更具体地回答您的问题(尽管我非常感谢Onorio建议使用Ti

这似乎是一个非常愚蠢的问题,但如何在Elixir中获取并显示当前日期或时间?我试过了,但什么也找不到。我需要使用Erlang函数吗?

我认为最好的选择是使用Paul Schoenfelder(又名BitWalker)的timex库来获得长生不老药。lib在这里:您可以从hex.pm获取包。Paul在github repo的自述页面上很好地解释了如何使用该库


您可以调用本地Erlang库,但我认为Paul的库在处理Elixir时更为优越。

要更具体地回答您的问题(尽管我非常感谢Onorio建议使用Timex!),您可以使用
:calendar.universal\u time()从Erlang标准库获取当前日期和时间
:日历。本地时间()
。在
日历
模块中,有许多有用的函数用于处理Erlang的
日期时间
类型,但它们有些有限,并且不提供任何解析或格式化日期的功能,这正是Timex的用途。

您还可以使用
:os.timestamp\0
,返回
{megaseconds,seconds,microsonds}
来自UTC。
:os.timestamp |>:calendar.now_to_datetime
将以erlang标准提供您现在的时间。{code>{yyyyy,MM,DD},{HH,MM,SS}格式。

如果您需要处理夏令时或时区,我为您制作了一个库

要获取当前时间,您可以使用例如
Calendar.DateTime.now(“America/Los_Angeles”)
获取洛杉矶当前时间,或者使用
Calendar.DateTime.now_utc
获取utc当前时间。

来自Erlang 19.1:

:os.system_time(:millisecond)
来自Erlang 18:

:os.system_time(:milli_seconds)
给出当前UNIX时间戳UTC

感谢@HenrikN链接您可以用来获取UTC日期时间的博文。

如果您不在乎时区,只想要纯日期和时间,请使用:

NaiveDateTime.utc\u现在
#=>~N[2017-11-30 20:49:54.660724]

日期时间 如果还需要时区详细信息,请使用,它还将返回时区名称、UTC偏移量、STD偏移量和时区缩写:

DateTime.utc\u现在
#=>%DateTime{calendar:calendar.ISO,天:30,小时:20,微秒:{667345,6},分钟:51,月:11,秒:58,标准偏差:0,时区:“Etc/UTC”,UTC偏差:0,年份:2017,时区缩写:“UTC”}


然后,您还可以从这些模块中调用
到_date/1
到_time/1
,以从datetime结构中获取特定的日期和时间值。

这取决于您想要的格式

您可以使用Elixir中的Erlang标准库中的任何函数。传统上,您可以使用该函数:

iex(1)> :erlang.now
{1487, 549978, 29683}
这表示时间1487549978.29683,即2017年2月20日星期一UTC午夜后19分38.29683秒

但是,由于Erlang/OTP 18,该函数已被弃用;原因之一是Erlang保证返回值将增加每次调用。如果在机器上以紧密循环的方式调用它,速度足够快,每微秒调用一次以上,则返回的时间戳将超过实时时间

替换为。此新API的主要接口是函数,该函数以系统定义的单位返回历元时间:

iex(2)> :os.system_time
1487549978296838000
您可以使用
系统时间/1
请求特定装置,但:

iex(3)> :os.system_time(:millisecond)
1487549978296
自Elixir 1.2以来,这些功能在本机中也可用:

要获得更友好但仍然是长生不老药的本机界面,请使用模块,它将为您提供元组:

iex(5)> :calendar.universal_time
{{2017, 2, 20}, {0, 19, 38}}
自1.3版以来,Elixir还拥有自己的一套用于处理日期和时间的模块:和。您可以使用其函数获取当前日期或时间,如下所示:

iex(6)> Date.utc_today
~D[2017-02-20]
iex(7)> DateTime.utc_now
#DateTime<2017-02-20 00:19:38.29683Z>
iex(6)>Date.utc\u今天
~D[2017-02-20]
iex(7)>DateTime.utc\u现在
#日期时间
获取unix时间戳

DateTime.to_unix(DateTime.utc_now)

要获取毫秒数(Unix时间戳),请执行以下操作:


好吧,Timex通常会帮助救援,但是下面的一些技巧可能会有所帮助:

{erl_date, erl_time} = :calendar.local_time()
# {{2020, 11, 19}, {0, 6, 36}}

{:ok, time} = Time.from_erl(erl_time)
# {:ok, ~T[00:06:36]}

{:ok, date} = Date.from_erl(erl_date)
# {:ok, ~D[2020-11-19]}

Calendar.strftime(time, "%c", preferred_datetime: "%H:%M:%S")
# "00:06:36"


Calendar.strftime(date, "%c", preferred_datetime: "%m-%d-%Y")
# "11-19-2020"

谢谢你的推荐,Onorio!对于任何人来说,我都很乐于接受稿件,这样我们就可以让TimEX在灵丹妙药的日子/时间里去图书馆,也许有一天如果它能达到标准,就可以把它合并到仙丹标准库中。如果你有兴趣帮忙的话,请给我一个消息,或者在GITHU上向问题跟踪器潜水。b并发送一些拉取请求!@bitwalker是的,Erlang/Elixir对日期/时间库有很多事情要做。我希望timex也能合并到Elixir中:)回答得好,谢谢你们,我一定会查看timex!我们现在有:
DateTime.utc\u now()
。和
Calendar.strftime/2
来格式化它。要将其放入POSIX/UNIX时间戳中:很好的一个Sam,正是我要找的;)链接死了-。
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
{erl_date, erl_time} = :calendar.local_time()
# {{2020, 11, 19}, {0, 6, 36}}

{:ok, time} = Time.from_erl(erl_time)
# {:ok, ~T[00:06:36]}

{:ok, date} = Date.from_erl(erl_date)
# {:ok, ~D[2020-11-19]}

Calendar.strftime(time, "%c", preferred_datetime: "%H:%M:%S")
# "00:06:36"


Calendar.strftime(date, "%c", preferred_datetime: "%m-%d-%Y")
# "11-19-2020"