我想将erlang:timestamp((的结果转换为正常的日期类型,公历类型。
正常日期类型表示"日-月-年,小时:分钟:秒"。
ExampleTime = erlang:timeStamp(),
ct:pal("~p", [ExampleTime]).
这显示{1568,869478,181646}
我想这个单位是第二个,但不确定它代表什么。
如何使用代码及其概念进行转换。 更具体一点,我不知道,但举个例子,
{1568, 869478, 181646} == {年+月,日,小时+分钟}.
请看文档 erlang:timestamp((,它说
erlang:timestamp(( -> timestamp
类型
时间戳 = 时间戳((
时间戳(( =
{MegaSecs :: integer() >= 0, Secs :: integer() >= 0, MicroSecs :: integer() >= 0}
以 {MegaSecs, Secs, MicroSecs} 格式返回当前 Erlang 系统时间...
然后 stdlib 库的模块日历提供了几个转换函数,例如 calendar:now_to_datetime(现在(:
1> calendar:now_to_datetime({1568,869478,181646}).
{{2019,9,19},{5,4,38}}
这是我的代码:
{{Y,M,D},{ H,MM,SS}} = calendar:now_to_datetime({MegaSecs,Secs,MicroSecs }),
lists:flatten(io_lib:format("~B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B", [Y, M, D,H,MM,SS])).
% result like 2019-09-18 12:00:00
在从erlang:timestamp()
转换为人类可读的时间戳时,我一直在使用这个函数:
format_utc_timestamp(TS, Separator) ->
{_,_,Micro} = TS,
{{Year,Month,Day},{Hour,Minute,Second}} =
calendar:now_to_universal_time(TS),
io_lib:format("~4w-~2..0w-~2..0w~s~2..0w:~2..0w:~2..0w.~6..0w",
[Year,Month,Day,Separator,Hour,Minute,Second,Micro]).
其中TS
是{MegaSecs, Secs, MicroSecs}
的时间戳值,Separator
是用于漂亮打印时间戳的字符串。这将为您提供格式,T
作为分隔符:
2019-09-25T10:19:19.020202
如果您想获取 ISO 8601 时间戳,您可以在上述函数的最后一行进行以下格式化:
io_lib:format("~4w-~2..0w-~2..0wT~w:~2..0w:~2..0wZ", [Year,Month,Day,Hour,Minute,Second])
这将导致2014-09-22T20:53:44Z
下面是生成 ISO 8601 格式的示例:
1> {{Year, Month, Day}, {Hour, Min, Sec}} = calendar:now_to_datetime(erlang:timestamp()).
{{2019,9,19},{15,7,3}}
2> list_to_binary(io_lib:format("~.4.0w-~.2.0w-~.2.0wT~.2.0w:~.2.0w:~.2.0w.0+00:00", [Year, Month, Day, Hour, Min, Sec])).
<<"2019-09-19T15:07:03.0+00:00">>
或者您可以使用erlang:universaltime()
代替calendar:now_to_datetime(erlang:timestamp())
获取世界时