Ecto.DateTime и часовые пояса
Есть ли способ настроить объекты Ecto.DateTime для часового пояса? Я хотел бы прочитать Ecto.DateTime из базы данных, но затем настроить его для часового пояса, назначенного пользователем?
Кроме того, я хотел бы принять ввод данных и преобразовать их обратно, используя настройку часового пояса.
Я искал библиотеку или технику, чтобы сделать это, но не нашел ничего очевидного
1 ответ
Решение
Экто не включает в себя такие функции. Есть несколько библиотек для Elixir, которые могут сделать это. Я только использовал timex
, Чтобы сохранить значения Timex в базе данных с помощью Ecto, вы можете использовать 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"