Rails中奇怪的ActiveRecord时区行为

时间:2013-02-25 13:54:51

标签: ruby-on-rails activerecord timezone

我在巴西,距离UTC约3小时。 我没有在Rails中为时区做任何配置,我的控制台表现得很奇怪,这是一个例子:

    1.9.3p194 :099 >   FreeTime.first.starts_at
     => 2000-01-01 11:15:26 UTC 
    1.9.3p194 :100 > FreeTime.first.starts_at.localtime
     => 2000-01-01 09:15:26 -0200 
    1.9.3p194 :101 > FreeTime.first.starts_at.localtime.zone
     => "BRST" 
    1.9.3p194 :102 > Time.now
     => 2013-02-25 10:24:51 -0300 
    1.9.3p194 :103 > Time.now.zone
     => "BRT" 
    1.9.3p194 :104 > Time.zone
     => (GMT+00:00) UTC

正如您所看到的,问题是Rails Time类正确地计算出我的localzone(来自我的系统时钟),但ActiveRecord以某种方式弄错了。我想知道为什么ActiveRecord错误地指出我的时区是BRST(右边是BRT),即使我没有做任何配置。

1 个答案:

答案 0 :(得分:2)

根本没有弄错。它意识到你在巴西时区,并且在2000-01-01 11:15:26 UTC,巴西时区是BRST,即UTC-2。

the year 2000中,BRST - > BRT过渡时间是2月26日。

您需要了解您的时区不是真正的“BRT”或“BRST” - 它是两者的组合,包括它们之间的过渡。所以例如我在英国。我们目前正在使用GMT,我们将在夏季过渡到BST - 因此夏季时间值的正确输出将是BST,UTC + 1。