2016-11-30 5 views
3

В моем приложении Phoenix У меня есть форма с полем даты/времени, которая помещает значение даты и времени в Params в следующем формате:Как вы разбираете строку даты и времени в тип, совместимый с Ecto.DateTime от Elixir?

2016-11-30 20:00 

Я могу разобрать его с помощью Timex библиотеки:

Timex.parse("2016-11-30 20:00", "%Y-%m-%d %H:%M", :strftime) 

Каких результаты в:

{:ok, ~N[2016-11-30 20:00:00]} 

"~ N [2016-11-30 20:00:00]" является "наивным" значение даты и времени, который не включает в себя временную зону. Проблема в том, что этот тип значения не соответствует Ecto.DateTime, поэтому я не могу поместить его в набор изменений и сохранить в моей базе данных.

Вопрос: Как вы анализируете дату и время в строке в значение Ecto.DateTime с конкретным часовым поясом (например, US/Eastern)?

ответ

2

Несмотря на то, что существует много способов получения ecto-совместимого значения из наивного, существует более надежное решение: Timex Plugin for Ecto.

Это исходный код может вдохновить всех, кто все еще хочет перепрофилировать колесо в доме.

+0

Отлично, спасибо - это сработало. Я изменил форму типа поля Ecto.DateTime на Timex.Ecto.DateTime, тогда мне нужно было убедиться, что значение datetime правильно отформатировано с часовым поясом: «2016-12-01 12: 00: 00-0500» или «2016- 12-01 12: 00: 00Z ". Зафиксируйте это в моем проекте: https://github.com/alex-kovshovik/shovik_com/commit/5c41fa26b8d8e1a36fe1c9d00a4a05fe29081a7c –