ruby-on-rails - 为什么 `config.time_zone`似乎没有任何作用?

标签 ruby-on-rails ruby-on-rails-3

application.rb中,它说:

Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.



但是设置config.time_zone = 'Central Time (US & Canada)'config.time_zone = 'Eastern Time (US & Canada)'无效-模型中的created_at字段仍保存在UTC中。

根据this railsforum answer:

config.time_zone just lets rails know that your server is set to this timezone so when it writes dates to the database it can properly convert it to UTC.



如果是这样,那为什么当我的系统时间是Pacific Time (US & Canada)config.time_zone = 'Central Time (US & Canada)'config.time_zone = 'Eastern Time (US & Canada)'时,created_at时间才是正确的UTC?应该不是不正确吗?

因为,如果PST时间为8 PM,则EST为11 PM,UTC为4 AM。
假设Rails执行Time.now,那将是晚上8点。我们告诉Rails服务器处于EST。因此,就Rails而言,晚上8点将是EST时间,而UTC则是UTC上午5点,这将是不正确的(因为实际时间是PST / EST晚上11点EST,即UTC上午4点)。

这里发生了什么?

最佳答案

以下是一些可以帮助您的概念和事项:
config.time_zone未设置“服务器时间”,通常由您的操作系统控制。

Rails始终将您的日期存储在数据库的UTC中(除非您更改其他设置)。
Time.now返回您所在时区中计算机的本地时间,它还包含操作系统的本地时区偏移量,这意味着Ruby,因此Rails知道如何将本地时间转换为UTC。您可以直接使用irb尝试此操作,因此不会加载Rails库:

ctcherry$ irb
>> Time.now
=> Mon Feb 21 20:53:14 -0800 2011
>> 

如果将config.time_zoneTime.zone设置为EST,Rails期望如果您设置的datetime属性表示该时间和日期位于指定的时区(在本例中为EST)。这就是为什么将Time.zone设置为最终用户的时区,以便他们可以使用其本地时间和日期,并且可以将它们直接传递到ActiveRecord模型中,并且Rails可以将其转换为UTC以便存储在数据库中。

这些帮助有用?

关于ruby-on-rails - 为什么 `config.time_zone`似乎没有任何作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073917/

相关文章:

ruby-on-rails - Rails 高级注册实现如何?

javascript - 在 nginx 错误 495(错误的客户端证书)上从 Rails Assets 管道提供样式表?

ruby-on-rails - 我怎样才能更好地执行我的代码?

ruby-on-rails-3 - 在 authbind 下运行 trinidad 服务器(用于 Rails)?

ruby-on-rails - Rails 3.1 和 sprockets 使使用 firebug 进行调试变得更加困难?

ruby-on-rails - 如何使用 render_to_string 在 lib ruby​​ 类中呈现部分

ruby-on-rails - Windows 下的 Rails 3 readline 问题

ruby-on-rails - FactoryGirl - 覆盖与特征的关联?

ruby-on-rails - Lib 类中的用户辅助函数

javascript - 如何通过 jquery/javascript 将切换发布到 Rails