我想获取当前时间,并按以下方式设置其格式:
年-月-日时:分:秒SSSZ
(其中SSS是毫秒,Z是时区)
代码到目前为止,我有它如下:
formatted_date() ->
{{Y,M,D},{H,Min,S}} = erlang:localtime(),
{Ms, _, _} = os:timestamp(),
{Days, {Hours, _,_}} = calendar:time_difference(erlang:universaltime(), erlang:localtime()),
Difference = 24*Days + Hours,
Tz = [case Difference < 0 of
true ->
$-;
false ->
$+
end | io_lib:format("~2..0B00",[Difference])],
io_lib:format("[~4..0B-~2..0B-~2..0BT~2..0B:~2..0B:~2..0B.~3..0B ~5.s]",
[Y, M, D, H, Min, S, Ms, Tz]).
事实是它总是返回相同的Ms,因此,我认为我做得不好,在其他问题中我只看到如何获得以毫秒为单位的总时间,而不是如何以这种方式格式化它。
- 谢谢-谢谢
1条答案
按热度按时间yv5phkfx1#
最简单的方法是使用库函数
calendar:system_time_to_rfc3339/2
-它似乎可以满足您的所有要求。此功能在2018年6月发布的Erlang/OTP 21.0中添加。
您的代码总是为
Ms
获得相同值的原因是os:timestamp/0
返回的元组中的第一个值是 megaseconds,而不是毫秒;这三个值分别是毫秒、秒和微秒。这是在Erlang不支持大整数的时候产生的,所以拆分时间戳是必要的。现在你可以只调用os:system_time/1
或a number of other functions, depending on what kind of time you need,并得到一个整数的结果。