2017-01-21 4 views
0

Как вернуть время в utc формате (2014-06-01T12: 00: 00Z). Я читал документы о модуле календаря, но не было объяснений, как создать формат времени, подобный этому. Моя программа должна работать в разных часовых поясах, поэтому, пожалуйста, дайте мне советы.erlang - время возврата в utc формате

ответ

1

Центральная страница Erlang Converting Between struct:time and ISO8601 Format имеет следующий пример:

К сожалению, нет библиотек Erlang не предоставлять эту функциональность. К счастью, туземные дата и время Erlang форматы очень легко форматировать для показа или передачи, даже в формате ISO-8601:

-module(iso_fmt). 
-export([iso_8601_fmt/1]). 

iso_8601_fmt(DateTime) -> 
    {{Year,Month,Day},{Hour,Min,Sec}} = DateTime, 
    io_lib:format("~4.10.0B-~2.10.0B-~2.10.0B ~2.10.0B:~2.10.0B:~2.10.0B", 
     [Year, Month, Day, Hour, Min, Sec]). 

format_iso8601() -> 
    {{Year, Month, Day}, {Hour, Min, Sec}} = 
     calendar:universal_time(), 
    iolist_to_binary(
     io_lib:format(
     "~.4.0w-~.2.0w-~.2.0wT~.2.0w:~.2.0w:~.2.0wZ", 
     [Year, Month, Day, Hour, Min, Sec])). 

Используя вышеупомянутый модуль:

1> {{Year,Month,Day},{Hour,Min,Sec}} = erlang:localtime(). 
{{2004,8,28},{1,19,37}} 
2> io:fwrite("~s\n",[iso_fmt:iso_8601_fmt(erlang:localtime())]). 
2004-08-28 01:48:48 

Чтобы сделать это время вывода в UTC, просто передайте ему возвращаемое значение erlang:universaltime() вместо erlang:localtime().

+0

большое спасибо –

+0

io: fwrite ("~ s \ n", [iso_fmt: iso_8601_fmt (erlang: localtime())]). это печатает нормально и 2004-08-28 01:48:48. я конвертирую время в двоичном формате, поэтому я не хочу ok в моем результате –

+1

ok - это возвращаемое значение io: fwrite ([link] (http://erlang.org/doc/man/io.html#fwrite- 2)). В erlang все функции имеют возвращаемое значение. Тот факт, что вы видите его в оболочке, просто потому, что io: fwrite является последней функцией в вашем тестовом примере. Но если вам нужно получить результат для его преобразования, вы должны использовать io_lib: fwrite ([link] (http://erlang.org/doc/man/io_lib.html#fwrite-2)), которые возвращают string, а напечатайте его и верните ok. – Pascal