Ecto.DateTime 的等价物是 NaiveDateTime,因为它们都不存储时区,而 DateTime 存储。 Erlang 日期时间也没有时区,这就是为什么 DateTime 中没有 to_erl 和 from_erl。
您可以先转换为NaiveDateTime,然后使用DateTime.from_naive/2 以及您的日期时间所在的时区(Elixir 仅支持Etc/UTC,从 Elixir 1.4 开始):
iex(1)> Ecto.DateTime.utc |> Ecto.DateTime.to_erl |> NaiveDateTime.from_erl! |> DateTime.from_naive!("Etc/UTC")
%DateTime{calendar: Calendar.ISO, day: 8, hour: 4, microsecond: {0, 0},
minute: 49, month: 2, second: 9, std_offset: 0, time_zone: "Etc/UTC",
utc_offset: 0, year: 2017, zone_abbr: "UTC"}
iex(2)> DateTime.utc_now |> DateTime.to_naive |> NaiveDateTime.to_erl |> Ecto.DateTime.from_erl
#Ecto.DateTime<2017-02-08 04:50:23>
如果您之前使用的是Ecto.DateTime,那么您现在可能想使用NaiveDateTime。