2017-12-13 11 views
0

私のアプリでは、操作のタイムアウトを設定する必要があります。 Timexライブラリのおかげで、それは簡単です。エリクサー1.5 DateTimeの比較

悲しいことに、私は奇妙なエラーが発生しました。私はそれを見つけて、これを見つけました:

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 

私は間違っていますか?それはバグですか、それともこのようなものですか? エリクサーで2つの日時を比較する正しい選択は何ですか?

PS>私はエリクサー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] 

答えて

3

DateTimeで比較演算子を使用することはできません。これらの演算子には、DateTime構造体は、DateTime(年、月、日など)の比較方法を比較しない単なるマップです。これには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