在我的应用程序中,我需要设置操作超时。感谢Timex库,这很容易做到。
可悲的是,我遇到了一个奇怪的错误。我挖了它,发现了这个:
iex(55)> dt = Timex.now() |> Timex.add( Timex.Duration.from_seconds( 10))
#DateTime<2017-12-13 18:32:30.922418Z>
iex(56)> DateTime.utc_now()
#DateTime<2017-12-13 18:32:22.411246Z>
iex(57)> dt <= DateTime.utc_now()
false
iex(58)> dt <= DateTime.utc_now()
false
iex(59)> dt <= DateTime.utc_now()
false
iex(60)> dt <= DateTime.utc_now()
false
iex(61)> dt <= DateTime.utc_now()
false
iex(62)> dt <= DateTime.utc_now()
false (!)
iex(63)> dt <= DateTime.utc_now()
true (!)
iex(64)> dt <= DateTime.utc_now()
false (!)
iex(65)> dt <= DateTime.utc_now()
false
iex(66)> dt <= DateTime.utc_now()
false
Run Code Online (Sandbox Code Playgroud)
我做错了什么?这是一个错误,还是本来就是这样的?在 Elixir 中比较两个日期时间的正确选择是什么?
PS> 我正在使用Elixir 1.5.2。
Erlang/OTP 20 [erts-9.0.1] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false]
Run Code Online (Sandbox Code Playgroud)
不能将比较运算符与DateTime. 对于这些运算符,DateTime结构只是一个映射,它不会比较您想要比较DateTimes(年、月、日等)的方式。您可以DateTime.compare/2为此使用:
iex(1)> {:ok, dt1, 0} = DateTime.from_iso8601("2017-12-13 18:32:30.922418Z")
{:ok, #DateTime<2017-12-13 18:32:30.922418Z>, 0}
iex(2)> {:ok, dt2, 0} = DateTime.from_iso8601("2017-12-13 18:32:22.411246Z")
{:ok, #DateTime<2017-12-13 18:32:22.411246Z>, 0}
iex(3)> DateTime.compare(dt1, dt2)
:gt
iex(4)> DateTime.compare(dt2, dt1)
:lt
Run Code Online (Sandbox Code Playgroud)