【发布时间】:2011-05-01 09:42:18
【问题描述】:
我对 Rails 中的时区有点困惑。我希望我的 rails 应用程序使用英国夏令时(如美国的夏令时)作为我的模型中在 updated_at 和 created_at 中设置的时间戳。我改变了我的 environment.rb 说
config.time_zone = 'London'
我的应用程序所在的 ubuntu 服务器似乎在使用 BST:例如,在命令行中,如果我输入“日期”,我会得到当前时间(不偏移一个小时)。在 Rails 控制台中,我看到以下内容:
>> time = Time.now
=> Wed Oct 27 16:29:17 +0100 2010
>> time.zone
=> "BST"
一切都好。但是,如果我创建一个新的 AR 模型对象并保存它,则时间戳是一小时前的。所以,看起来这是使用 UTC。现在,我可以看到其中的逻辑:由于时间戳可能在模型逻辑中使用,因此您希望它们基于不变的标准时间,即 UTC。但是,这是我不理解的一种奇怪的行为:
#change a record and save it
>> someobj.save
=> true
#object's updated_at is one hour ago
>> someobj.updated_at
=> Wed, 27 Oct 2010 15:34:22 UTC +00:00
>> Time.now
=> Wed Oct 27 16:34:31 +0100 2010
#however, Time.now - object's updated at is just a few seconds.
>> Time.now - someobj.updated_at
=> 15.305549
所以,在做减法之前,updated_at 被转换成当前时区。
我想在当前时区显示日期的原因只是为了在视图中显示状态报告等:如果有人更新了某些东西,我希望他们看到它是在“1 分钟前”而不是“一小时前”更新的.
谁能解开我的疑惑?干杯,最大
编辑:我的直接问题是在状态中显示正确的时间,这是通过使用“time_ago_in_words”助手解决的,该助手会根据时区进行调整。不过,我仍然希望有人解释时间戳是怎么回事:)
【问题讨论】:
标签: ruby-on-rails datetime timezone