Mes horodatages created_at
sont stockés dans UTC:
>> Annotation.last.created_at => Sat, 29 Aug 2009 23:30:09 UTC +00:00
Comment puis-je convertir l’un d’eux en «heure de l’est (États-Unis et Canada)» (en tenant compte de l’heure d’été)? Quelque chose comme:
Annotation.last.created_at.in_eastern_time
Utilisez la méthode in_time_zone de la classe DateTime
Loading development environment (Rails 2.3.2) >> now = DateTime.now.utc => Sun, 06 Sep 2009 22:27:45 +0000 >> now.in_time_zone('Eastern Time (US & Canada)') => Sun, 06 Sep 2009 18:27:45 EDT -04:00 >> quit
Donc, pour votre exemple particulier
Annotation.last.created_at.in_time_zone('Eastern Time (US & Canada)')
Bien que ce soit une vieille question, il convient de mentionner quelque chose. Dans une réponse précédente, il est suggéré d’utiliser un before_filter pour définir le fuseau horaire dans le temps.
Vous ne devriez jamais faire cela parce que Time.zone stocke les informations dans le thread et il va probablement fuir à la prochaine requête gérée par ce thread.
Au lieu de cela, vous devez utiliser un around_filter pour vous assurer que Time.zone est réinitialisé une fois la demande terminée. Quelque chose comme:
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
En savoir plus à ce sujet ici
Si vous ajoutez ceci à votre /config/application.rb
config.time_zone = 'Eastern Time (US & Canada)'
Ensuite, vous pouvez cellulaire
Annotation.last.created_at.in_time_zone
pour obtenir l’heure dans le fuseau horaire spécifié.
Définissez votre fuseau horaire sur l’heure de l’est.
Vous pouvez définir votre fuseau horaire par défaut dans config / environment.rb
config.time_zone = "Eastern Time (US & Canada)"
Maintenant, tous les enregistrements que vous sortez seront dans ce fuseau horaire. Si vous avez besoin de fuseaux horaires différents, par exemple en fonction du fuseau horaire d’un utilisateur, vous pouvez le changer avec un avant_filtre dans votre contrôleur.
class ApplicationController < ActionController::Base before_filter :set_timezone def set_timezone Time.zone = current_user.time_zone end end
Assurez-vous que vous stockez tous vos temps dans la firebase database au format UTC et que tout ira bien.
Si vous configurez votre /config/application.rb
config.time_zone = 'Eastern Time (US & Canada)' Time.now.in_time_zone DateTime.now.in_time_zone