我目前有一个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文档后迷路了。
答案 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}}