erlang如何获得微秒的时间

时间:2015-04-13 17:50:42

标签: erlang

我试图按照以下格式获取时间“2015-04-13T17:37:46.456Z”

我正在使用以下功能来获取它:

get_time({_,_,Micro} = Timestamp) ->
    {{Year, Month, Day}, {Hour, Minute, Second}} =     calendar:now_to_datetime(Timestamp),
    StrTime = lists:flatten(io_lib:format("~4..0w-~2..0w-~2..0wT~2..0w:~2..0w:~2..0w.~3..0wZ",[Year,Month,Day,Hour,Minute,Second,Micro])),
    StrTime.

但是,当我调用此函数时,它会返回如下内容:“2015-04-13T17:37:46。*** Z” 它在微秒的位置显示*(星号)。我做错了什么?

2 个答案:

答案 0 :(得分:2)

根据io manual如果指定的字段宽度太小,则整个字段将填充*字符。对于微秒,字段宽度被指定为3但它可以是6位数,这导致*。

您可以将微秒转换为字符串,然后使用前3个字符,前导0(如果少于3位)。

    lists:flatten(io_lib:format("~4..0w-~2..0w-~2..0wT~2..0w:~2..0w:~2..0w.~3..0sZ",
[Year, Month, Day, Hour, Minute, Second, integer_to_list(Micro)])).

答案 1 :(得分:1)

要求打印微秒钟只需要3位数,同时需要打印6个(一般)。