将Ecto.DateTime转换为毫秒

时间:2016-08-24 20:53:53

标签: time elixir ecto milliseconds

在Elixir中,将Ecto.DateTime转换为整数毫秒的最佳方法是什么?

我看到this example并相信我已经调整了几毫秒,但我想知道我的方法是否有任何警告。

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

1 个答案:

答案 0 :(得分:2)

计算对我来说是正确的。您使用更多管道稍微改善了这一点:

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