gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 11:45:16 26 4
gpt4 key购买 nike

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com