Je suis un peu confus au sujet des fuseaux horaires dans les rails. Je veux que l'application de mes rails utilise l'heure d'été britannique (comme l'heure d'été aux États-Unis) pour les timestamps définis dans updated_at et created_at dans mes modèles. J'ai changé environment.rb direLes horodatages Rails n'utilisent pas le bon fuseau horaire
config.time_zone = 'London'
Le serveur ubuntu mon application est semble utiliser BST pour son temps: dans la ligne de commande, par exemple, si i type « date » je reçois l'heure actuelle (pas compensé par une heure). Dans la console rails, je vois ce qui suit:
>> time = Time.now
=> Wed Oct 27 16:29:17 +0100 2010
>> time.zone
=> "BST"
Tout va bien. Cependant, si je crée un nouvel objet de modèle AR et que je l'enregistre, les horodatages datent d'il y a une heure. Donc, il semble que ce soit en utilisant UTC. Maintenant, je peux voir la logique dans cela: puisque les horodateurs peuvent être utilisés dans la logique du modèle, vous voulez qu'ils soient basés sur un temps de référence invariable, à savoir UTC. Mais, cela est un peu bizarre de comportement que je ne comprends pas:
#change a record and save it
>> someobj.save
=> true
#object's updated_at is one hour ago
>> someobj.updated_at
=> Wed, 27 Oct 2010 15:34:22 UTC +00:00
>> Time.now
=> Wed Oct 27 16:34:31 +0100 2010
#however, Time.now - object's updated at is just a few seconds.
>> Time.now - someobj.updated_at
=> 15.305549
Ainsi, avant de faire la soustraction, updated_at est converti en fuseau horaire. La raison pour laquelle je veux afficher la date dans le fuseau horaire actuel est juste pour les rapports d'état etc dans les vues: si quelqu'un met à jour quelque chose je veux qu'ils voient qu'il a été mis à jour il y a '1 minute' '.
Quelqu'un peut-il me déconseiller? acclamations, max
EDIT: Mon problème immédiat, de montrer le bon moment dans l'état, est résolu en utilisant l'assistant 'time_ago_in_words', qui ajuste le fuseau horaire. J'aimerais quand même que quelqu'un explique ce qui se passe avec les horodateurs. :)
ah - c'est super. Merci! Je suis d'accord qu'il est logique de les garder tous en UTC. –
ok, je l'ai eu. mais si je veux afficher l'heure locale sur le datetime sélectionnez sur ma vue que puis-je faire? – Diego
Probablement le meilleur moyen est d'utiliser une méthode JavaScript pour mapper les heures système aux heures locales du navigateur. C'est une autre question cependant. – tadman