Zab*_*bba 21 ruby-on-rails ruby-on-rails-3
在application.rb,它说:
将Time.zone默认设置为指定区域,并将Active Record自动转换为此区域.运行"rake -D time"以获取用于查找时区名称的任务列表.默认为UTC.
但是设置config.time_zone = 'Central Time (US & Canada)'或者config.time_zone = 'Eastern Time (US & Canada)'没有效果 - created_at模型中的字段是以UTC格式保存的.
config.time_zone只是让rails知道你的服务器被设置为这个时区,所以当它将日期写入数据库时,它可以正确地将它转换为UTC.
如果这是真的,那么它为什么,当我的系统时间Pacific Time (US & Canada)和config.time_zone = 'Central Time (US & Canada)'或config.time_zone = 'Eastern Time (US & Canada)',该created_at时间是正确的UTC?它应该不正确吗?!
因为,如果PST时间是晚上8点,则EST是晚上11点,UTC是凌晨4点.假设Rails确实如此Time.now,那将是晚上8点.我们告诉Rails服务器在EST中.因此,就Rails而言,晚上8点将是EST时间,然后UTC将是UTC时间上午5点,这将是不正确的(因为实际时间是太平洋标准时间晚上8点/美国东部时间晚上11点,即UTC时间上午4点)
这里发生了什么?
ctc*_*rry 46
以下是可能对您有所帮助的概念和事项列表:
config.time_zone 不设置"服务器时间",通常由您的操作系统控制.
Rails始终将您的日期以UTC格式存储在数据库中(除非您更改其他设置).
Time.now在您的时区中返回计算机的本地时间,它还包括操作系统的本地时区偏移量,这意味着Ruby和Rails知道如何将localtime转换为UTC.您可以irb直接使用,因此不会加载任何Rails库:
ctcherry$ irb
>> Time.now
=> Mon Feb 21 20:53:14 -0800 2011
>>
Run Code Online (Sandbox Code Playgroud)
如果config.time_zone或者Time.zone设置为允许说EST,Rails预计如果你设置一个datetime属性,你指的是该时间和日期在指定的时区,在这种情况下是EST.这就是为什么你将Time.zone设置为等于你的最终用户时区,这样他们就可以使用他们的本地时间和日期,你可以将它们直接传递给你的ActiveRecord模型,Rails可以将它转换为UTC存储在数据库中.
这些帮助有用?
Pau*_*ber 15
您需要使用in_time_zone(即Time.now.in_time_zone)获得除UTC之外的其他内容.
| 归档时间: |
|
| 查看次数: |
18448 次 |
| 最近记录: |