我在创建 inserted_at 和 updated_at 时在Ecto上发现了一个有趣的行为。
在午夜过后,我的应用程序表现正常..但在午夜过后,它的行为类似于日志
[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}
&gt;&gt;&gt;的值RUNTIME DATETIME 是使用:calendar.local_time 生成的,这会产生正确的时间。
&gt;&gt;&gt; CHAT NEW 值是 Ecto 在将数据保存到数据库后生成的, updated_at 和 inserted_at 都是错误的时间!
有人知道如何解决这个问题吗?
由于
答案 0 :(得分:1)
时间不错,它们是UTC,而:calendar.local_time
则返回系统时区的时间。由于有7小时的差异,您可能住在these places之一。
如果您运行:calendar.universal_time
,您应该获得当前的UTC时间,该时间将与使用的Ecto匹配。
您还可以使用:calendar.universal_time_to_local_time/1
将通用时间转换为本地时间,使用:calendar.local_time_to_universal_time/1
反转。