0
我在巴西,距离UTC有-3个小时。 我没有做对Rails的时区的任何配置,我的控制台行为怪异,这里是例子:Rails中奇怪的ActiveRecord时区行为
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的时间类计算出正确的我localzone(从我的系统时钟),但ActiveRecord不知何故错误。我想知道为什么ActiveRecord错误地认为我的时区是BRST(正确的是BRT),即使我没有做任何配置。
很好的回答!我开始意识到在数据库上拥有一个Time字段的最佳方法是使用Integer for Hour和Integer for Minutes。由于我在巴西,每次存储时间时,都会在2000-01-01,因此出现在错误的时区。 – alexandrecosta 2013-02-25 14:36:48
@ user1261084:说实话,这很少是开始时间的最佳方式。在大多数情况下,将值存储为UTC是写入方法 - 最好存在将本地日期/时间与时区一起存储的情况。 – 2013-02-25 14:40:13
如果我每个星期二在15:00预约,夏季它将继续在15:00。但是,如果我将它作为“15:00:00 -0300”存储在数据库中,夏季时它会让我知道约会是在“16:00:00 -0200”。非常混乱......时间是时间,因为很多情况下它不依赖于区域。 DateTime依赖区域。我不明白为什么Rails坚持在Time数据库属性中记录日期。它应该有一个更好的方法来避免这种混淆。现在我将时间存储为“11:00:00 -0300”,并且让我回到“11:00:00 -0200”:https://gist.github.com/anonymous/5030404 – alexandrecosta 2013-02-25 15:06:54