在Elixir中,将Ecto.DateTime
转换为整数毫秒的最佳方法是什么?
我看到this example并相信我已经调整了几毫秒,但我想知道我的方法是否有任何警告。
(((datetime
|> Ecto.DateTime.to_erl
|> :calendar.datetime_to_gregorian_seconds
|> Kernel.-(62167219200)) * 1000000) + datetime.usec)
|> div(1000)
答案 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。