Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date Erlang:如何将Erlang日期转换为二进制?_Date_Erlang_Tuples_Binaries - Fatal编程技术网

Date Erlang:如何将Erlang日期转换为二进制?

Date Erlang:如何将Erlang日期转换为二进制?,date,erlang,tuples,binaries,Date,Erlang,Tuples,Binaries,我有以下返回当前日期的函数: 7> {Y,M,D}=erlang:date(). {2014,11,18} 现在我需要一个二进制文件,里面有这样的值: <<"20141118">> 9> list_to_binary(lists:map(fun erlang:integer_to_list/1, [Y, M, D])). <<"20141118">> 您可以这样做: <<"20141118">> 9>

我有以下返回当前日期的函数:

7> {Y,M,D}=erlang:date().
{2014,11,18}
现在我需要一个二进制文件,里面有这样的值:

<<"20141118">>
9> list_to_binary(lists:map(fun erlang:integer_to_list/1, [Y, M, D])).
<<"20141118">>

您可以这样做:

<<"20141118">>
9> list_to_binary(lists:map(fun erlang:integer_to_list/1, [Y, M, D])).
<<"20141118">>
9>列表到二进制(列表:映射(fun-erlang:integer-to-list/1[Y,M,D])。
或者像这样,这对于较大的列表是等效的,但实际上并不实用:

10> list_to_binary([integer_to_list(Y), integer_to_list(M), integer_to_list(D)]).
<<"20141118">>
10>列表到二进制([整数到列表(Y)、整数到列表(M)、整数到列表(D)])。

根据和的答案,尝试以下功能

date\u to\u binary()->
{Y,M,D}=erlang:date(),
BinY=列表\u到\u二进制(整数\u到\u列表(Y)),
BinM=列表到二进制(整数到列表(M)),
BinD=list_to_binary(integer_to_list(D)),
.
这可能不是最有效的方法,但它可能是开箱即用的最明确的逐步转换

{Y,M,D}=erlang:date().
list_to_binary( io_lib:format("~p~p~p", [Y,M,D]) ).
输出为


你可以试试这个方法

您应该在二进制文件中添加分隔符,或者至少格式化它,否则您将无法用二进制文件区分2014/12/09和2014/01/29。 您可以使用:

list_to_binary(io_lib:format("~4w~2w~2w", [Y,M,D])).  % which will add space when necessary
或者,如果您只想存储信息,可以将每个元素存储为16位二进制:

lists:foldr(fun(X,Acc) -> <<X:16,Acc/binary>> end,<<>>,[Y,M,D]). % the result is less friendly to read but easier to manipulate.
列表:foldr(fun(X,Acc)->end,[Y,M,D])%结果不太容易阅读,但更容易操作。
结果:

1> list_to_binary(io_lib:format("~4w~2w~2w",[2014,1,11])).   
<<"2014 111">>
2> lists:foldr(fun(X,Acc) -> <<X:16,Acc/binary>> end,<<>>,[2014,1,11]).
<<7,222,0,1,0,11>>
3> 
1>列出二进制文件(io_库:格式(“~4w~2w~2w”,[2014,1,11])。
2> 清单:foldr(fun(X,Acc)->结束,[2014,1,11])。
3> 

延迟响应,但原因是:

另一个单线方案使用(矿山项目):

qdate:to_字符串(,{erlang:date(),{0,0,0})。

qdate:to_string
的格式化选项遵循PHP的
date()
函数格式化约定。添加{0,0,0}是必要的,因为三元组被视为erlang时间戳(
now()
format),而三元组的两元组(例如:
{2015,9,30},{15,54,39}
)则需要它来识别日期格式。

考虑使用
整数到二进制/1
,将更有效。
qdate:to_string(<<"Ymd">>, {erlang:date(), {0,0,0}}).