2016-08-24 112 views
1

在Elixir中,将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