J'ai un problème assez courant, mais pour une raison quelconque, j'ai essayé toutes les suggestions sur le Web et que personne ne semble fonctionner.
J'ai défini le fuseau horaire dans la configuration "Est"
config.time_zone = 'Eastern Time (US & Canada)'
Mais lorsque le temps est affiché à l'écran, il continue de montrer l'heure UTC stockée dans la DB. J'ai essayé le débogueur et voici la sortie
(rdb:1) Time.zone
#<ActiveSupport::TimeZone:0x1061f4760 @utc_offset=nil, @current_period=nil, @name="Eastern Time (US & Canada)", @tzinfo=#<TZInfo::TimezoneProxy: America/New_York>>
(rdb:1) Order.first.placed_at
Fri Jan 01 15:00:00 UTC 2010
Mise à jour: Voici un autre utilisateur qui a la même question Rails Timezone est faux lorsqu'il est affiché
Essayer in_time_zone
. Par exemple
>> Time.now
=> Sun Dec 05 21:34:45 -0500 2010
>> Time.zone
=> #<ActiveSupport::TimeZone:0x1033d97b8 @name="Pacific Time (US & Canada)", @tzinfo=#<TZInfo::DataTimezone: America/Los_Angeles>, @utc_offset=-28800, @current_period=nil>
>> Time.now.in_time_zone
=> Sun, 05 Dec 2010 18:34:54 PST -08:00
Dans votre cas, vous voulez Order.first.placed_at.in_time_zone
.
Si vous voulez définir un champ d'heure différent pour différents utilisateurs de votre application , assurez-vous d'utiliser un whide_filter par opposition à un filtre avant de changer de temps. zone. Quelque chose à voir avec la façon dont le temps. Les fuites à d'autres discussions et d'autres utilisateurs peuvent donc inhibérer un fuseau horaire qu'ils ne devraient pas. De ce blog Post: http://ilikestuffblog.com/2011/02/03/how-to-se-a-time-zone-for-each-request-in-rils/
dans application_controller.rb:
around_filter :set_time_zone
private
def set_time_zone
old_time_zone = Time.zone
Time.zone = current_user.time_zone if logged_in?
yield
ensure
Time.zone = old_time_zone
end
J'ai également trouvé utile d'utiliser le TIME_ZONE_SLIRECTE Formulaire de méthode d'assistance lorsque vous permettant aux utilisateurs de changer de fuseau horaire. Si vous avez appelé votre champ: Time_Zone, vous l'utiliseriez comme:
f.time_zone_select(:time_zone)
Et enfin, cela a l'air plutôt génial. Détecter automatiquement et définir une fuseau horaire via JavaScript . Voici le Rails GEM à ajouter au pipeline d'actif: https://github.com/scottwater/detect_timezone_rails et liste de blog d'accompagnement: http://wwww.scottw.com/automated-timezone-detection
Vérifiez que votre ActiveRecord::Base.time_zone_aware_attributes
est vrai.
Je pense que ce que vous décrivez, c'est ce bogue - https://github.com/rails/rails/issues/6816