我对rails 3时区应该如何工作感到困惑。
所以我将rails配置为使用太平洋时间,并告诉活动记录以太平洋时间存储。
# application.rb
config.time_zone = 'Pacific Time (US & Canada)'
config.active_record.default_timezone = 'Pacific Time (US & Canada)'
现在我提交更新模型,这通过参数:
"start_at"=>"2013-07-24 00:00:00"
现在从控制台:
>> Sale.last
=> #<Sale id: 24, start_at: "2013-07-24 00:00:00", ...snipped... >
>> Sale.last.start_at
=> Tue, 23 Jul 2013 17:00:00 PDT -07:00
>> Sale.last.start_at.in_time_zone
=> Tue, 23 Jul 2013 17:00:00 PDT -07:00
因此,在尝试将所有内容强制为太平洋时间之后,它创建的时间对象通过考虑太平洋时间的 -7 小时来形成数据库。
如果我设定一个时间,2013-07-24 00:00:00
我希望Tue, 24 Jul 2013 00:00:00 PDT -07:00
会回来。然而事实并非如此。当活动记录使用 UTC 存储日期时,我遇到了类似的令人困惑的问题。我有一些测试只有在下午 5 点之后才会失败,因为时间到日期转换产生了不同的日期。
我该如何驯服这个?在数据库中存储 UTC 日期似乎是个好主意,我可以使用in_time_zone
时间对象进行显示,但这是否意味着表单中的时间必须是 UTC?
我们的应用程序功能与服务器时间密切相关,并且某些事情每天都会在特定时间发生。因此,将所有内容强制到太平洋时间似乎应该没问题。但到目前为止,我似乎无法使这种行为始终如一。
我怎样才能让这一切都不糟糕?