如何将日期和时间字符串解析为与 Elixir 的 Ecto.DateTime 兼容的类型?

How do you parse a date and time string into a type compatible with Elixir's Ecto.DateTime?

在我的 Phoenix 应用程序中,我有一个带有 date/time 字段的表单,该字段按以下格式将日期时间值放入参数中:

2016-11-30 20:00

我可以使用 Timex 库解析它:

Timex.parse("2016-11-30 20:00", "%Y-%m-%d %H:%M", :strftime)

这导致:

{:ok, ~N[2016-11-30 20:00:00]}

"~N[2016-11-30 20:00:00]" 是 "naive" 日期时间值,不包括时区。问题是:此值类型与 Ecto.DateTime 不匹配,因此我无法将其放入变更集并保存到我的数据库中。

问题:如何将字符串中的日期和时间解析为具有特定时区的Ecto.DateTime值(例如US/Eastern) ?

虽然有很多方法可以从原始方法中产生外兼容值,但有更可靠的解决方案:Timex Plugin for Ecto

它的源代码可能会激发仍然想在内部重新实现轮子的每个人。