将time()检索为HH:MM:SS字符串

eli*_*ocs 2 erlang string-formatting

我正在学习Erlang,我问自己什么是将time()输出转换为格式化时间字符串(HH:MM:SS)的最佳方法.我想出的代码是:

my_time() ->
    {H, M, S} = time(),
    integer_to_list(H) ++ ":" ++ integer_to_list(M) ++ ":" ++ integer_to_list(S).
Run Code Online (Sandbox Code Playgroud)

这段代码不会完全诀窍,因为它不会用分钟或秒来填充零.它还使用++运算符来连接不推荐的列表.

在Erlang中实现这个简单任务的正确方法是什么?

Nay*_*uki 12

一个正确的,易于理解的实现使用format(就像printf):

my_time() ->
    {H, M, S} = time(),
    io_lib:format('~2..0b:~2..0b:~2..0b', [H, M, S]).
Run Code Online (Sandbox Code Playgroud)

~2..0b是一个占位符,用于在基数10中打印一个整数,占用至少2个字符,并在左侧填充字符0.

参考文献:

如果您在紧密循环中调用函数,并且分析基准测试表明您的函数实际上是一个瓶颈,那么您应该只担心性能.