Erlang 如何筛选没有ETS的ETS表:选择

Erlang 如何筛选没有ETS的ETS表:选择,erlang,otp,ets,Erlang,Otp,Ets,我有一个在ETS表中存储一些数据的模块 现在我试图过滤迭代ETS表的数据,但总是得到空的[List]。(此项每次都匹配-匹配(“$end\u of_table”,Acc)->Acc;) -模块(t)。 -导出([匹配/0])。 匹配()->匹配(ets:first(auth),[])。 匹配('end_of_table',Acc)->Acc; 匹配(钥匙,Acc)-> FromSec=日历:日期时间到公历秒({2017,1,12},{11,00,00}), ToSec=日历:日期时间到公历秒({

我有一个在ETS表中存储一些数据的模块 现在我试图过滤迭代ETS表的数据,但总是得到空的[List]。(此项每次都匹配-匹配(“$end\u of_table”,Acc)->Acc;)

-模块(t)。
-导出([匹配/0])。
匹配()->匹配(ets:first(auth),[])。
匹配('end_of_table',Acc)->Acc;
匹配(钥匙,Acc)->
FromSec=日历:日期时间到公历秒({2017,1,12},{11,00,00}),
ToSec=日历:日期时间到公历秒({2017,1,12},{12,00,00}),
案例ets:查找(身份验证、密钥)
[{Login,Pass,TTL,Unix,Unix2}]当Unix2>=FromSec,Unix2=NewAcc=[{Login,Pass,TTL,Unix,Unix2}Acc]时,
N=ets:下一步(认证,密钥),
匹配(N,NewAcc);
_->N=ets:下一步(验证,键),
匹配(N,Acc)
结束。

可能是我创建的ETS表不正确吗

变量名
Unix
Unix2
表明您正在存储Unix时间戳,即自1970年以来经过的秒数,但函数
calendar:datetime_to_gregorian_seconds
返回自0年以来经过的秒数。(请参阅。)因此,您的比较
Unix2>=FromSec,Unix2=
总是错误的

日历模块使用偏移量
?DAYS\u(从0到1970)*?SECONDS\u/u DAY
在两者之间进行转换,宏定义为:

-define(SECONDS_PER_DAY, 86400).
-define(DAYS_FROM_0_TO_1970, 719528).
请参阅示例。

找到了答案

unixtime和 日历:日期时间到公历秒({2017,1,12},{11,00,00})是不同的


因此,它将所有内容匹配到匹配(“$end\u of_table”,Acc)->Acc

是的。刚刚解决了这个问题。并张贴答案。谢谢你的回答
-define(SECONDS_PER_DAY, 86400).
-define(DAYS_FROM_0_TO_1970, 719528).