Elixir/Phoenix/Timex: 协议 Timex.Protocol 未针对 :error 实施

Elixir/Phoenix/Timex: protocol Timex.Protocol not implemented for :error

我正在尝试解析日期并将其保存到 table。这是函数:

defp string_to_datetime(string) do
  result = string
           |> String.split(";")
           |> List.last
           |> Timex.parse("{0M}/{0D}/{YYYY} {h12}:{m} {AM}")
  case result do
    {dt, _} -> dt
    :error -> nil
  end
end

该字符串在开始时需要一些清理,但当我尝试将其保存到此字段时出现错误:

field :first_appointment, Timex.Ecto.DateTime

这是错误:

** (exit) an exception was raised:
    ** (Protocol.UndefinedError) protocol Timex.Protocol not implemented for :error
      (timex) lib/protocol.ex:1: Timex.Protocol.impl_for!/1
      (timex) lib/protocol.ex:36: Timex.Protocol.to_datetime/2

真的不知道是什么意思。有什么想法吗?

Timex.parse/2 期望 return {:ok, dt}{:error, reason}

您必须像这样更改您的案例结果:

case result do
  {:ok, dt} -> dt
  {:error, reason} -> IO.inspect reason
end

这来自 Timex 实施:

@spec parse(String.t, String.t) :: {:ok, DateTime.t | NaiveDateTime.t} | {:error, term}