2017-07-03 3 views
0

inserted_atupdated_atを作成すると、Ectoで面白い動作が見つかりました。Ecto datetimeで面白い動作?

用渡さ深夜前に、私のアプリは正常に動作します..しかし、渡された真夜中の後に、それは、ログ以下のような

[info] >>> RUNTIME DATETIME {{2017, 7, 4}, {2, 38, 43}} 
[info] >>> CHAT NEW = %Portal.DailyChat{__meta__: 
#Ecto.Schema.Metadata<:loaded, "daily_chats">, id: 17, inserted_at: ~N[2017-07-03 19:38:43.315000], messages: 
"{\"chats\":[{\"time\":\"2:38:43\",\"message\":\"Test\",\"from\":\"bi***@gmail.com\"}]}", read: true, updated_at: ~N[2017-07-03 19:38:43.315000], user_a: %Po 
rtal.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, id: 3, inserted_at: ~N[2017-06-16 20:08:05.000000], name: "Indra", password: nil, password_ 
hash: "AF41E68E1309FA29A5044CBDC36B90A3821D8807E68C7675A6C495112BC8A55F", updated_at: ~N[2017-06-16 20:08:05.000000], username: "bi****@gmail.com"}, user_a_id: 
3, user_b: %Portal.User{__meta__: #Ecto.Schema.Metadata<:loaded, "users">, id: 1, inserted_at: ~N[2017-06-16 16:18:25.000000], name: "Bromo", passw 
ord: nil, password_hash: "AF41E68E1309FA29A5044CBDC36B90A3821D8807E68C7675A6C495112BC8A55F", updated_at: ~N[2017-06-16 16:18:25.000000], username: "bro***@gm 
ail.com"}, user_b_id: 1} 

を振る舞う値は>>>ランタイムDATETIMEを使用して生成される:calendar.local_time、どの正確な時刻を生成します。 については

>>> NEW値をチャットがエクトは、DBにデータを永続化した後、 inserted_atとupdated_atの両方が間違った時間です生成するものです!

誰もこの問題を解決する方法を知っていますか?

おかげ

+0

タイムスタンプマクロについては、https://hexdocs.pm/ecto/Ecto.Schema.htmlを参照してください。削除したり置き換えたり、動作をカスタマイズすることができます。 –

答えて

1

:calendar.local_timeは、システムのタイムゾーンの時刻を返しながら、彼らはUTCにいる、間違っていないです。 7時間の違いがあるので、あなたはおそらくthese placesのいずれかに住んでいます。

:calendar.universal_timeを実行する場合は、使用されているEctoに一致する現在のUTC時刻を取得する必要があります。

また、世界時を:calendar.universal_time_to_local_time/1で、逆数を:calendar.local_time_to_universal_time/1として変換することもできます。

+0

さて、エクトに私の現地時間を強制する方法は?どんな手掛かり?だから私はDBの私の記録に正しい時間を持つことができます –

+0

私はちょうど世界時を現地時間に変換する方法を追加しました。 UTCで時刻を保存し、印刷/表示するときにユーザーに変換する必要があります。 – Dogbert

+0

Hmmm ...それは回避策です...実際の問題を解決していない...私は非エリキシルを使用している別のアプリが問題になる場合...他の誰かがそれをやっていると言うならば、 –

関連する問題