J'ai du mal à convertir un UTC Time
ou TimeWithZone
une heure locale dans Rails 3.
Say moment
est une Time
variable en UTC (par exemple moment = Time.now.utc
). Comment puis-je convertir moment
mon fuseau horaire en prenant soin de l'heure d'été (c'est-à-dire en utilisant EST / EDT)?
Plus précisément, j'aimerais imprimer "Lundi 14 mars, 9h00" si l'heure correspond à ce matin à 9h00 HAE et "Lundi 7 mars 9h00" si l'heure était 9h00 HNE lundi dernier.
Espérons qu'il existe un autre moyen?
Edit : J'ai d'abord pensé que "EDT" devrait être un fuseau horaire reconnu, mais "EDT" n'est pas un fuseau horaire réel, plus comme l'état d'un fuseau horaire. Par exemple, cela n'aurait aucun sens de demander Time.utc(2011,1,1).in_time_zone("EDT")
. C'est un peu déroutant, car "EST" est un fuseau horaire réel, utilisé dans quelques endroits qui n'utilisent pas l'heure d'été et qui durent (UTC-5) toute l'année.
la source
(new Date()).getTimeZoneOffset()
. Mais c'est assez incohérent, donc ce gars semble avoir écrit le sien: onlineaspect.com/2007/06/08config.time_zone = 'Wellington'
, puis utiliser Time.current (qui est équivalent à time.now mais a utilisé le fuseau horaire que vous avez défini)Time#localtime
vous donnera l'heure dans le fuseau horaire actuel de la machine exécutant le code:Mise à jour: si vous souhaitez convertir vers des fuseaux horaires spécifiques plutôt que vers votre propre fuseau horaire, vous êtes sur la bonne voie. Cependant, au lieu de vous soucier de EST vs EDT, passez simplement dans le fuseau horaire général de l'Est - il saura en fonction du jour s'il est EDT ou EST:
la source
in_time_zone
méthode avec leur fuseau horaire.Time.now.localtime
fonctionne sur une session irb normale mais lorsque j'essaye de l'exécuter sur une machine qui est dans le fuseau horaire UTC, cela ne fonctionne pas.Il est facile de le configurer en utilisant la zone locale de votre système, juste dans votre application.rb ajoutez ceci
Ensuite, les rails devraient vous montrer les horodatages dans votre heure locale ou vous pouvez utiliser quelque chose comme cette instruction pour obtenir l'heure locale
la source
Il y a en fait un joli Gem appelé
local_time
par basecamp pour faire tout cela du côté client uniquement, je crois:https://github.com/basecamp/local_time
la source
Je ne sais pas pourquoi, mais dans mon cas, cela ne fonctionne pas comme suggéré précédemment. Mais cela fonctionne comme ceci:
Bien sûr, vous devez changer la
offset
valeur de la vôtre.la source
Si vous le faites simplement parce que vous souhaitez obtenir le fuseau horaire de l'utilisateur, tout ce que vous avez à faire est de changer votre fuseau horaire en vous
config/applications.rb
.Comme ça:
Les rails, par défaut, enregistreront votre enregistrement de temps en UTC même si vous spécifiez le fuseau horaire actuel.
C'est donc tout ce que vous avez à faire et vous êtes prêt à partir.
la source