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"
有什么方法可以针对时区调整 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"