在我的應用程序中,夏令時(DST)有一個非常奇怪的問題。出於某種原因,每當我從表格中收到時間時,它都不會爲DST自行調整。例如,如果我在控制檯中創建一個新的時間,在適當的時區,將其寫入數據庫,然後嘗試從數據庫中檢索它,它會在一小時前回來。在Rails 2.3.5中夏時制時間計算不正確?
下面是一個例子:
在這裏,我們可以看到,使用控制檯,在美國東部時間下午3點創建一個新的時間等於19:00 UTC(因爲調整了DST,這使得它-0400代替通常的-0500):
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
現在,我試着寫同一時間到數據庫和檢索回:
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
我environment.rb中有這樣的:
config.time_zone = 'UTC'
而且application_controller.rb有這樣的:
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
末
任何想法,什麼可能會發生在這裏,如何解決?我已經在這幾天了,真的,任何幫助將不勝感激!
非常感謝。
你是絕對正確的菲爾,非常感謝你! :) – michaeldwp 2010-09-10 21:28:16
同樣的問題在這裏,但我不能切換到日期時間,因爲我只對時間感興趣,我希望能夠查詢所有有時間後的記錄,例如13:00。如果我切換到日期時間,我不能這樣做。 – iwiznia 2011-06-09 15:09:20