erlang 如何用微秒获取时间

erlang how to get time with microsecond

我正在尝试获取以下格式的时间“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.

然而,当我调用这个函数时 returns 是这样的:“2015-04-13T17:37:46.***Z” 它在微秒的位置显示 *(星号)。我做错了什么?

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

您可以将微秒转换为字符串,如果少于 3 位数字,则使用前 3 个带前导 0 的字符。

    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)])).

您要求打印只有 3 位数字的微秒,而它需要打印 6 位(通常)。