あなたのタイムスタンプは有効なISO 8601ですが、Ectoはv2.1.0-rc.2
のような日付時刻の解析をサポートしていません。 timex
のような他のライブラリを使用してそれらを解析し、UTCに変換してからEctoに格納することができます。
iex(1)> "2016-10-16T21:21:27-04:00" |> Timex.parse!("{ISO:Extended}")
#<DateTime(2016-10-16T21:21:27-04:00 Etc/GMT+4)>
iex(2)> "2016-10-16T21:21:27-04:00" |> Timex.parse!("{ISO:Extended}") |> Timex.to_datetime
#<DateTime(2016-10-17T01:21:27Z Etc/UTC)>
エクト2.1を使用すると、:utc_datetime
フィールドに直接この値を格納することができます
iex(1)> created_at = "2016-10-16T21:21:27-04:00" |> Timex.parse!("{ISO:Extended}") |> Timex.to_datetime
#<DateTime(2016-10-17T01:21:27Z Etc/UTC)>
iex(2)> Repo.insert!(%Person{created_at: created_at})
12:58:39.959 [debug] QUERY OK db=2.5ms
INSERT INTO "people" ("created_at","inserted_at","updated_at") VALUES ($1,$2,$3) RETURNING "id" [{{2016, 10, 17}, {1, 21, 27, 0}}, {{2016, 10, 17}, {7, 28, 39, 945106}}, {{2016, 10, 17}, {7, 28, 39, 948505}}]
%Friends.Person{__meta__: #Ecto.Schema.Metadata<:loaded, "people">, age: nil,
created_at: #<DateTime(2016-10-17T01:21:27Z Etc/UTC)>, first_name: nil, id: 1,
inserted_at: ~N[2016-10-17 07:28:39.945106], last_name: nil,
updated_at: ~N[2016-10-17 07:28:39.948505]}
あなたは、すべて一緒にだけでなく、ダッシュのタイムゾーンを削除しているように見えました。ここにタイムゾーンを正しく表現する方法はありますか? –