Формат с ведущими нулями в Эрланге - PullRequest
2 голосов
/ 29 сентября 2011

Я хотел бы вернуть местное время в виде строки, но с ведущими нулями. Я попробовал это:

{{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 ]

6 голосов
/ 29 сентября 2011

Попробуйте:

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

io_lib:format/2 (и его спутник io:format/2) фактически возвращает глубокий список ввода-вывода. Такой список пригоден для печати и может быть отправлен в сокет или записан в файл в виде плоской строки, но его создание более эффективно. Сглаживание часто бесполезно, потому что во всех случаях, когда строка будет напечатана или выведена в файл / сокет, она автоматически будет сглажена Erlang.

3 голосов
/ 29 сентября 2011

Вы хотите использовать что-то вроде этого:

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

Более распространенный модификатор формата w делает правильные вещи здесь, что с базой и тому подобным, поэтому нет необходимости использовать более сложный модификатор B. 2..0 говорит: «2 символа в ширину, с добавлением нуля, без указания точности». Нам здесь не нужна точность, поскольку мы имеем дело с целыми числами.

...