2017-12-13 11 views
0

내 앱 작동 시간 초과를 설정해야합니다. Timex 라이브러리 덕분에 쉽게 할 수 있습니다.엘릭서 1.5 날짜 시간 비교

슬프게도, 이상한 오류가 있습니다. 나는 이것을 파고 발견 :

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 

내가 뭘 잘못하고있어? 그게 벌레일까요, 아니면 이런 뜻인가요? Elixir에서 두 datetime을 비교하는 올바른 선택은 무엇입니까?

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