2017-07-03 2 views
0

Ich fand gerade ein witziges Verhalten auf Ecto beim Erstellen insert_at und updated_at.Ecto lustiges Verhalten in Datetime?

Vor vergangen Mitternacht meine App verhält normalen .. aber nach Mitternacht vergangen verhält es sich wie unter log

[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} 

Wert für >>> RUNTIME DATETIME- wird erzeugt unter Verwendung: calendar.local_time, die produziert eine korrekte Zeit.

Für >>> Chat NEU Werte ist, was Ecto erzeugt, nachdem Daten an die DB, die beide updated_at und inserted_at sind falsche Zeit persistierende!

Weiß jemand, wie man dieses Problem behebt?

Dank

+0

Lesen Sie über die Zeitstempel Makro hier: https://hexdocs.pm/ecto/Ecto.Schema.html Ich denke, Sie könnten entweder entfernen und ersetzen oder das Verhalten anpassen. –

Antwort

1

Die Zeiten sind nicht falsch, sie sind in UTC während :calendar.local_time die Zeit in Ihrem System die Zeitzone zurück. Da es einen Unterschied von 7 Stunden gibt, wohnst du wahrscheinlich in einem von these places.

Wenn Sie :calendar.universal_time ausführen, sollten Sie die aktuelle UTC-Zeit abrufen, die mit dem einen Ecto übereinstimmen wird.

Sie können die Universalzeit auch in Ortszeit umwandeln, indem Sie :calendar.universal_time_to_local_time/1 verwenden, und umgekehrt unter Verwendung von :calendar.local_time_to_universal_time/1.

+0

Okay ... wie kann man Ecto zwingen, meine Ortszeit zu benutzen? irgendeine Ahnung? So kann ich die richtige Zeit in meinem Datensatz in DB haben –

+0

Ich habe gerade hinzugefügt, wie universelle Zeit in Ortszeit zu konvertieren. Sie sollten die Zeit in UTC speichern und beim Drucken/Anzeigen für Benutzer konvertieren. – Dogbert

+0

Hmmm ... das ist eine Arbeit rum ... nicht lösen wirkliches Problem ... wenn ich eine andere App habe, die kein Elixier benutzt, wäre das Problem ... falls jemand anderes es tun sollte –