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

前端之家收集整理的这篇文章主要介绍了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
原文链接:https://www.f2er.com/ruby/272423.html

猜你在找的Ruby相关文章