【发布时间】:2014-10-25 20:26:14
【问题描述】:
当我将 DateTime schedule_time 保存到数据库时,它会根据我的本地时间保存,但时间戳 (created_at) 显然是以 UTC 保存的(比我的太平洋时间提前 7 小时)
因此,如果我现在提交设置我的schedule_time 的表单,它将与我的created_at 相差 7 个小时。
我需要向许多用户展示他们在自己选择的区域中的时间,并且我还需要相互比较时间,所以我希望所有数据库条目都在同一个区域中。在我的机器上进行测试,我的用户将他的区域保存为太平洋 (-7:00),但它在当地时间保存 schedule_time,而不是真正的 UTC,所以当我尝试像这样显示时间时:
@item.schedule_time.in_time_zone(@user.time_zone)
它实际上需要存储的日期时间并从中减去 7 小时,从而使我比我想要的时间提前了 7 小时。我认为最好的办法是以统一的方式存储所有日期时间,以便我可以轻松地比较它们。
更改此值config.time_zone = 'UTC' 不会更改我的日期时间的存储格式。无论如何,它都存储在我的当地时间,同时将时间戳存储在真实的 UTC 中。
我还尝试在存储之前重新格式化日期时间,使用in_time_zone(@user.time_zone),但它对存储的时间没有影响。
如果我可以像存储我的时间戳一样将schedule_time 存储在UTC 中,我就可以完成这项工作!有什么想法吗?
【问题讨论】:
-
schedule_time = schedule_time.utc应该可以解决问题,然后再将其存储到数据库中