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

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

我一直在寻找一个图书馆或一种技术来做到这一点,但没有发现任何明显的东西

最佳答案

Ecto 不包含任何此类功能。有几个可用的 Elixir 库可以做到这一点。我只用过 timex 。要使用 Ecto 在数据库中存储 Timex 值,您可以使用 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"

关于datetime - Ecto.DateTime 和时区,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38989155/

10-11 03:01