В документации четко указано этот формат не поддерживается :
, в то время как ISO 8601 позволяет datetime указывать 24:00:00 в качестве нулевого часа следующего дня, эта запись не поддерживается Elixir
Тем не менее, не следует ожидать, что это будет обработано даже в будущем. Я бы пошел с явной вспомогательной функцией:
defmodule Helpers do
def naive_date_time({{y, m, d}, {24, 0, 0}}),
do: NaiveDateTime.add({{y, m, d}, {0, 0, 0}}, 24 * 3_600)
def naive_date_time(dt), do: NaiveDateTime.from_erl(dt)
end
Я не вижу здесь безобразия. Обратите внимание: при конвертации {24, 0, 0}
→ {0, 0, 0}
.
необходимо
добавить в день.
NB! Приведенное выше решение возникает при неправильном вводе. См. Обновление в исходном вопросе для исправления или ниже:
defmodule Helpers do
def naive_date_time({{y, m, d}, {24, 0, 0}}) do
{{y, m, d}, {0, 0, 0}}
|> NaiveDateTime.from_erl()
|> naive_date_time_add()
end
def naive_date_time(dt), do: NaiveDateTime.from_erl(dt)
defp naive_date_time_add({:ok, dt}),
do: {:ok, NaiveDateTime.add(dt, 24 * 3_600)}
defp naive_date_time_add(err), do: err
end