Daylight Savings Time not calculated properly in Rails 2.3.5?
我的应用程序中的夏令时(DST)有一个非常奇怪的问题。出于某种原因,每当我从表中收到一个时间,它就不会根据DST调整自己。例如,如果我在控制台中创建了一个新的时间,在适当的时区中,将其写入数据库,然后尝试从数据库中检索它,它会提前一小时返回。
下面是一个例子:
在这里,我们可以看到,使用控制台,在东部标准时间15:00创建一个新时间等于19:00 UTC(因为针对DST进行了调整,使其-0400而不是通常的-0500):
1 2 3 4 5 6 7 8 9 10 | ruby-1.8.6-p114 > Time.zone => #<ActiveSupport::TimeZone:0x12b1b68 @name="UTC", @tzinfo=nil, @utc_offset=0> ruby-1.8.6-p114 > Time.zone ="Eastern Time (US & Canada)" =>"Eastern Time (US & Canada)" ruby-1.8.6-p114 > Time.zone.parse("15:00") => Thu, 09 Sep 2010 15:00:00 EDT -04:00 ruby-1.8.6-p114 > Time.zone.parse("15:00").utc => Thu Sep 09 19:00:00 UTC 2010 ruby-1.8.6-p114 > Time.zone.parse("15:00").dst? => true |
现在,我试着将这段时间写入数据库,并将其检索回来:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ruby-1.8.6-p114 > b = Book.new => #<Book id: nil, return_time: nil, created_at: nil, updated_at: nil> ruby-1.8.6-p114 > b.return_time = Time.zone.parse("15:00") => Thu, 09 Sep 2010 15:00:00 EDT -04:00 ruby-1.8.6-p114 > b.save => true ruby-1.8.6-p114 > result = Book.find(:last).return_time => Sat Jan 01 19:00:00 UTC 2000 ruby-1.8.6-p114 > result.zone =>"UTC" ruby-1.8.6-p114 > result.in_time_zone => Sat, 01 Jan 2000 14:00:00 EST -05:00 ruby-1.8.6-p114 > result.dst? => false |
my environment.rb有:
1 | config.time_zone = 'UTC' |
而application eu controller.rb具有以下特点:
1 2 3 4 5 6 7 8 | before_filter :set_user_time_zone def set_user_time_zone if current_user Time.zone = current_user.time_zone else Rails.logger.error '[Time.zone.now.to_s][ERROR]: Missing current_user from in set_user_time_zone!' end |
结束
关于这里会发生什么以及如何修复它有什么想法吗?我已经在这里呆了好几天了,所以真的,任何帮助都会非常感谢!
非常感谢你。
看起来您只保存了时间部分;请注意日期部分是如何从
我不确定您使用的是什么版本的Rails,但我在2.1.2中遇到了同样的问题。似乎包含的时区库半年都不起作用,但开发人员认为它不值得转换;希望他们现在已经重新考虑了这个决定。
在任何情况下,我们最终都使用了TZINFO U时区插件,该插件在夏令时正确计算UTC偏移量。