在Erlang中使用前导零进行格式化

时间:2011-09-29 14:37:22

标签: erlang string-formatting

我想将本地时间作为字符串返回,但前导零。我试过这个:

{{Year, Month, Day}, {Hour, Minute, Second}} = erlang:localtime().
DateAsString = io_lib:format("~2.10.0B~2.10.0B~4.10.0B~2.10.0B~2.10.0B~2.10.0B", 
           [Month, Day, Year, Hour, Minute, Second]).

但如果某些组件是一位数,则返回的字符串为:

[["0",57],"29","2011","17","33","34"]

当前月9打印为["0",57]

请帮忙。

谢谢。

2 个答案:

答案 0 :(得分:6)

尝试:

1> lists:flatten([["0",57],"29","2011","17","33","34"]).
"09292011173334"

io_lib:format/2(和它的同伴io:format/2)实际上返回一个深IO列表。这样的列表是可打印的,可以在套接字上发送,也可以像扁平字符串一样写入文件,但生成效率更高。扁平化通常是无用的,因为在所有情况下,字符串将被打印或输出到文件/套接字,它将自动被Erlang展平。

答案 1 :(得分:3)

你想要使用这样的东西:

DateAsString = io_lib:format("~2..0w~2..0w~4..0w~2..0w~2..0w~2..0w", 
       [Month, Day, Year, Hour, Minute, Second]).

更常见的w格式修饰符在这里做正确的事情,使用base等等,因此不需要使用更复杂的B修饰符。 2..0表示“2个字符宽,零填充,未指定精度。”我们这里不需要精度,因为我们处理的是整数。