如何在erlang中比较两个小时?

时间:2017-11-07 12:46:32

标签: erlang

在erlang中比较两个小时的方法是什么?案例如下, 我有一个时间限制来执行交易逆转,例如:30分钟,如果 交易的时间超过30分钟前我 不应该允许交易被撤销。但我需要能够 比较小时数(从我要恢复的交易和现在的小时) 而且我找不到比较小时的任何erlang功能,有人可以帮助我吗?

LocalTime = calendar:local_time()
{{2017,11,7},{9,43,32}}
TransactionToRevertTime = {{2017,11,7},{9,23,36}}

2 个答案:

答案 0 :(得分:2)

您可以使用calendar:datetime_to_gregorian_seconds/1将两个日期时间转换为整数,减去它们,并检查它们的差异是否大于30 * 60

1> A = {{2017,11,7},{9,43,32}}.
{{2017,11,7},{9,43,32}}
2> B = {{2017,11,7},{9,23,36}}.
{{2017,11,7},{9,23,36}}
3> C = {{2017,11,7},{9,0,36}}.
{{2017,11,7},{9,0,36}}
4> A1 = calendar:datetime_to_gregorian_seconds(A).
63677267012
5> B1 = calendar:datetime_to_gregorian_seconds(B).
63677265816
6> C1 = calendar:datetime_to_gregorian_seconds(C).
63677264436
7> A1 - B1 > 30 * 60.
false
8> A1 - C1 > 30 * 60.
true

如果A现在,B小于30分钟前,而C大于30分钟前。

答案 1 :(得分:1)

来自Erlang Docs

“使用erlang:monotonic_time/0记下时间戳,并使用普通减法计算时差”

monotonic_time(second)的两次调用进行区分,如果差异超过1800,则超过30分钟。