在erlang中的日期转换

时间:2013-03-18 10:25:43

标签: erlang

我开发了这个功能:

get_data_by_transaction(TransactionCode)->

 Q = qlc:q([{X#transaction.datetime} || X <- mnesia:table(transaction),
                X#transaction.transaction_code =:= TransactionCode]),
    case do(Q) of
        [{K}] ->  
        {ok, K};

        [] ->
            {error, notfound}
    end.

当我测试这个函数时,我得到了这个结果:

{ok,{{2013,3,6},{7,12,49}}}

我的目标是获得这样的结果:

06/03/2013 7:12

所以我应该将我的数据转换为新格式

可以帮助我解决我的问题

我尝试使用此代码:

format_date({{Year, Month, Day}, {Hour, Minute, _}}) ->
    lists:flatten(
        io_lib:format("~2..0B/~2..0B/~4..0B ~B:~2..0B", [Day, Month, Year, Hour,Minute])). 

当我运行此代码时,我有:

3> format_date({{2013,3,6},{7,12,3}}).           
"06/03/2013 7:12"

但我的目标是不显示此结果,而是将此结果与变量相关联

我会尝试按照之前回复中的链接

1 个答案:

答案 0 :(得分:1)

如果所需的输出格式与示例一样简单,那么带有适当填充的io_lib:format/2就可以解决问题:

format_date({{Year, Month, Day}, {Hour, Minute, _}}) ->
    lists:flatten(
        io_lib:format("~2..0B/~2..0B/~4..0B ~B:~2..0B", [Day, Month, Year, Hour, Minute])).

长篇大论道歉 - 不幸的是,这是你用Erlang的格式说明符得到的。如果您想了解有关它们的更多信息,请参阅this postdocumentation。每次您需要使用格式化功能时,都希望返回此文档。它根本不坚持。

需要调用lists:flatten/1,因为io_lib:format/2会返回嵌套列表,可能是出于性能原因,因为输出会经常发送到接受iolists的函数。

另请注意,在将示例中的元组发送到上述函数之前,您需要摆脱前导ok。只需将其与{ok, DateTime} = get_data_by_transaction(...)匹配即可完成。