Ecto.DateTime 和时区

Ecto.DateTime and Time Zones

有什么方法可以针对时区调整 Ecto.DateTime 对象吗?我想从数据库中读取 Ecto.DateTime,然后根据用户指定的时区对其进行调整?

此外,我想接受数据输入并将其转换回来,使用时区设置。

我一直在寻找执行此操作的库或技术,但没有找到任何明显的东西

Ecto 不包含任何此类函数。有几个可用的 Elixir 库可以做到这一点。我只使用了 timex. To store Timex values in the database using Ecto, you can use the timex_ecto 包。以下是将 Timex.DateTime 值的时区更改为 America/Los_Angeles:

的方法
iex(1)> original = Timex.now
#<DateTime(2016-08-17T06:24:03.015339Z Etc/UTC)>
iex(2)> timezone = Timex.Timezone.get("America/Los_Angeles", original)
#<TimezoneInfo(America/Los_Angeles - PDT (-07:00:00))>
iex(3)> converted = Timex.Timezone.convert(original, timezone)
#<DateTime(2016-08-16T23:24:03.015339-07:00 America/Los_Angeles)>
iex(4)> Timex.format!(original, "{ISO:Extended}")
"2016-08-17T06:24:03.015339+00:00"
iex(5)> Timex.format!(converted, "{ISO:Extended}")
"2016-08-16T23:24:03.015339-07:00"