自Ecto.DateTime被弃用以来,如何创建新的DateTime?

时间:2019-03-07 12:56:02

标签: elixir phoenix

我目前有一个Date和一个Time,我真的很想合并成一个DateTime结构。

在Ecto 3之前,您可以使用Ecto.DateTime.from_date_and_time来执行此操作,但是在新文档中,由于Ecto类型已被弃用,我找不到等效的功能。

该函数当前如下所示:

def add_datetime(date_as_string) do
 (_, date = Date.from_iso8601(date)
 end_time = #T[23:59:59]

 datetime = datetime_add(Ecto.DateTime.from_date_and_time(date, end_time), -3, "day")
end

这个特定项目的限制之一是,我尽可能避免添加类似Timex的第三方库,但是在查看当前的Elixir文档后迷路了。

2 个答案:

答案 0 :(得分:2)

您可以使用DateTime.from_iso8601/2

datetime_iso8601 = "#{Date.to_iso8601(date)}T#{Time.to_iso8601(time)}+03:30"
{:ok, datetime, offset_from_utc} = DateTime.from_iso8601(datetime_iso8601)

使用所需的偏移量代替+3:30,或者使用UTC的Z

答案 1 :(得分:0)

对于任何在Google上发现此问题的人,如果您不关心时区信息,也可以使用datetime= NaiveDateTime.new(date_struct, time_struct) |> DateTime.from_naive("Etc/UTC")

{{1}}