J'ai un problème très étrange avec l'heure d'été (DST) dans mon application. Pour une raison quelconque, chaque fois que je reçois un temps de la table, il ne s'ajuste pas lui-même pour l'heure d'été. Par exemple, si je crée un nouvel horaire dans la console, dans le fuseau horaire approprié, l'écris dans la base de données, puis essaie de le récupérer dans la base de données, il revient une heure plus tôt.L'heure d'été n'est pas correctement calculée dans Rails 2.3.5?
Voici un exemple:
Ici, nous pouvons voir que l'utilisation de la console, ce qui crée une nouvelle heure à 15h00 HNE est égal à 19:00 UTC (depuis réglé pour l'heure d'été, ce qui le rend -0400 au lieu de l'habituel -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
maintenant, j'essaie d'écrire en même temps que la base de données, et le récupérer en arrière:
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
Mon environment.rb a ceci:
config.time_zone = 'UTC'
Et application_controller.rb a ceci:
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
fin
Toutes les idées sur ce qui pourrait se produire ici et comment y remédier? Cela fait des jours que je suis là-bas, alors vraiment, toute aide serait grandement appréciée!
Merci beaucoup.
Vous avez absolument raison Phil, merci beaucoup! :) – michaeldwp
Même problème ici, mais je ne peux pas passer à datetime puisque je ne suis intéressé que par le temps, je veux pouvoir interroger tous les enregistrements qui ont le temps après par exemple 13:00. Si je passe à datetime je ne peux pas faire ça. – iwiznia