ruby-on-rails – Rails时间戳不使用正确的时区

我对轨道上的时区有些困惑.我想要我的rails应用程序使用英国夏令时(如美国的夏令时)在我的模型中在updated_at和created_at中设置的时间戳.我改变了我的环境
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’帮助器来解决的,它调整时区.我仍然希望有人解释时间戳发生了什么事情:)

解决方法

时间戳认存储在UTC中,这可能是最好的方法.如果您从一个服务器环境转移到另一个服务器环境,那么您不希望所有的时间都在转换,只因为您切换时区.

如果您想知道当地时区的时间戳,那么您只需要这样做:

someobj.updated_at.localtime

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...