有没有办法为时区调整Ecto.DateTime对象?我想从数据库中读取一个Ecto.DateTime,然后根据用户指定的时区调整它?
另外,我想接受数据输入并使用时区设置将其转换回来。
我一直在寻找一个图书馆或技术来做到这一点,但没有发现任何明显的
答案 0 :(得分:5)
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"