在datetime中有趣的行为?

时间:2017-07-03 19:54:21

标签: elixir phoenix-framework ecto

我在创建 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 都是错误的时间!

有人知道如何解决这个问题吗?

由于

1 个答案:

答案 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反转。