2016-08-24 6 views
1

엘릭서에서는 Ecto.DateTime을 정수 밀리 초로 변환하는 가장 좋은 방법은 무엇입니까?Ecto.DateTime을 밀리 초로 변환

나는 this example을 보았고, 이것을 밀리 세컨드에 맞게 조정했다고 생각하지만, 내 접근 방식에 대한주의 사항이 있는지 알고 싶습니다.

(((datetime 
    |> Ecto.DateTime.to_erl 
    |> :calendar.datetime_to_gregorian_seconds 
    |> Kernel.-(62167219200)) * 1000000) + datetime.usec) 
|> div(1000) 

답변

1

계산 결과가 저에게 맞습니다. 당신이 약간 사용하여 더 많은 파이프를 향상 :

datetime = Ecto.DateTime.utc(:usec) 

datetime 
|> Ecto.DateTime.to_erl 
|> :calendar.datetime_to_gregorian_seconds 
|> Kernel.-(62167219200) 
|> Kernel.*(1000000) 
|> Kernel.+(datetime.usec) 
|> div(1000) 
|> IO.inspect 

출력 :

1472105945416 

또한 어떠한 성능 저하가 없습니다 있도록 가능한 모듈 속성에 저장, :calendar.datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}})와 그 상수 값을 대체 할 수 있습니다, 어떻게 timex does처럼.