我以json格式从SQL Server导出数据,因此我可以将其导入我的Phoenix应用程序。我不确定的是我应该如何处理日期。目前我将日期导出为Unix时间戳。这是一个样本:
[
{ "Log": { "Start": 1319734790, "End": 0, "Comment": "" },
{ "Log": { "Start": 1319732847, "End": 1319734790, "Comment": "Had lunch today" }
]
在Phoenix / Elixir中,将Unix时间戳转换为DateTime对象的最佳方法是什么?我假设因为我要插入Ecto数据库,我需要使用Ecto DateTime对象。
答案 0 :(得分:2)
你可以从这样的unix时间戳中获得一个Erlang风格的日期时间元组:
epoch = :calendar.datetime_to_gregorian_seconds({{1970, 1, 1}, {0, 0, 0}})
datetime = :calendar.gregorian_seconds_to_datetime(your_unix_timestamp + epoch)
这将使用datetime
{{2016, 4, 28}, {00:50:12}}
您可以使用Ecto.DateTime
Ecto.DateTime.from_erl/1
但请检查一下你的假设。也许你需要时区信息。我看到你的例子中有0
的值。你真的希望1970-01-01 00:00:00代表"没有价值"?
答案 1 :(得分:1)
您可以使用DateTime.from_unix/2
将unix时间戳转换为DateTime结构,如下所示
# Change unit to millisecond, the default is second
timestamps |> DateTime.from_unix(:millisecond)
当你有一个DateTime构造时,你可以将它传递给Ecto models字段。 Ecto支持2种字段类型naive_datetime
和utc_datetime
,它们对应NaiveDateTime
和DateTime
结构。您可以选择您想要的,Ecto将为您进行转换。
最后,两个字段类型将转换为数据库中的相同类型,即PostgreSQL中的timestamp without time zone
。因此,您可以轻松切换模型架构。