Как создать новый DateTime с тех пор, как Ecto.DateTime устарел? - PullRequest
1 голос
/ 07 марта 2019

В настоящее время у меня есть Date и Time, которые я действительно хотел бы объединить в DateTime структуру.

До Ecto 3 вы могли бы сделать это с Ecto.DateTime.from_date_and_time, но вновая документация, поскольку Ecto Types устарели. Я не могу найти эквивалентную функцию.

В настоящее время функция выглядит следующим образом:

def add_datetime(date_as_string) do
 (_, date = Date.from_iso8601(date)
 end_time = #T[23:59:59]

 datetime = datetime_add(Ecto.DateTime.from_date_and_time(date, end_time), -3, "day")
end

Одно из ограничений этого конкретного проекта заключается в том, что я будуЯ хотел бы избежать добавления сторонней библиотеки, такой как Timex, если это вообще возможно, но я теряюсь после просмотра текущей документации Elixir.

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Вы можете использовать DateTime.from_iso8601/2.

datetime_iso8601 = "#{Date.to_iso8601(date)}T#{Time.to_iso8601(time)}+03:30"
{:ok, datetime, offset_from_utc} = DateTime.from_iso8601(datetime_iso8601)

Вместо +3:30 используйте желаемое смещение или Z для UTC.

0 голосов
/ 07 марта 2019

Для тех, кто находит это в Google, вы также можете использовать NaiveDateTime, если вам не нужна информация о часовом поясе:

datetime= NaiveDateTime.new(date_struct, time_struct)
|> DateTime.from_naive("Etc/UTC")
...