2

日付を解析してテーブルに保存しようとしています。関数は次のとおりです。

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

それが何を意味するのか本当にわかりません。何か案は?

4

1 に答える 1

2

Timex.parse/2{: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}
于 2016-08-03T01:52:15.200 に答える