erlang - 以utc格式返回时间

时间:2017-01-21 09:45:02

标签: erlang

如何以utc格式返回时间(2014-06-01T12:00:00Z)。我阅读了有关日历模块的文档,但没有解释如何生成这样的时间格式。我的程序应该在不同的时区工作,所以请给我建议。

1 个答案:

答案 0 :(得分:2)

Erlang Central页面Converting Between struct:time and ISO8601 Format有这个例子:

  

不幸的是,没有Erlang库提供此功能。幸运的是,即使在ISO-8601格式下,原生的Erlang日期和时间格式也非常容易格式化以便显示或传输:

@GET
@Path("/export-report")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
//@Produces({ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" })
public Response exportReport() throws IOException {
    byte[] fileBytes = getFileBytes();
    String filename = "report.xslx";
    String mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

    return Response.ok()
            .header("Content-Disposition", "attachment; filename=\"" + filename + "\"")
            .header("Content-Length", fileBytes.length)
            .entity(fileBytes)
            .header("Content-Type", mimeType)
            .build();
}
     

使用上述模块:

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

要以UTC格式输出时间,只需将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 的返回值传递给erlang:universaltime()