2017-02-18 6 views
0

を変換することができ:ない私の目標は、分単位で時間差を見つけることですEcto.DateTime.to_erl

{_, {_, aaa, _}} = Ecto.DateTime.to_erl(d1) |> :calendar.time_difference(:calendar.universal_time) 

私は、PostgreSQLから取得したタイムスタンプを持っている:

iex(13)> d1 
~N[2017-02-09 07:23:04.000000] 

これまではうまく働きました:

d11 = Ecto.DateTime.to_erl(d1) 

しかし、今、それは例外をスロー:

* (FunctionClauseError) no function clause matching in Ecto.DateTime.to_erl/1 
    (ecto) lib/ecto/date_time.ex:608: Ecto.DateTime.to_erl(~N[2017-02-09 07:23:04.000000]) 

これを修正するにはどうすればよいですか?

私は時間などの外部ライブラリを使用するつもりはありません。

答えて

2

何らかの理由で、RDBMSにあるDateTimeの値にタイムゾーン情報がありません。タイムゾーンについて、元の心配は、後者がないではない(と同様に、標準的なErlangの日時。)

iex(1)> d1 = ~N[2017-02-09 07:23:04.000000] 
~N[2017-02-09 07:23:04.000000] 
iex(2)> NaiveDateTime.to_erl d1 
{{2017, 2, 9}, {7, 23, 4}} 

1が表示される場合があります上記のスニペットから、変換がまだあること:そこEcto.DateTimeNaiveDateTimeの主な違いはありますNaiveDateTime.to_erl/1で可能です。

RDBMSで日常的な日時の値を持つ原因を突き止めて修正するのがコアソリューションです。

+0

わかりませんが、Naive形式で返されます。 – Kevin

+0

私が心配する限り、RDBMSは**値を生成しません**、格納されたものを正確に返します。つまり、アプリケーションのどこかには、そこに純粋な価値が保存されています。原因を見つけることを強くお勧めします。そうしないと、長期的にはこの問題に間違いなく問題が生じるでしょう。 – mudasobwa

+0

以前はミリ秒単位でデータベースにdatetimeを保存しましたが、ここでは "秒"部分の昏睡後6桁です。どういう考えがありますか? – Kevin

関連する問題