2008-09-19 5 views
5

Je travaille sur une application Rails qui doit gérer les dates et les heures dans les fuseaux horaires des utilisateurs. Nous l'avons récemment migré vers Rails 2.1 et ajouté le support de fuseau horaire, mais il existe de nombreuses situations dans lesquelles nous utilisons Time # utc, puis nous comparons avec ce temps. Cela ne serait-il pas la même chose que de comparer avec l'objet Time original?Quand est-il approprié d'utiliser Time # utc dans Rails 2.1?

Quand est-il approprié d'utiliser Time # utc dans Rails 2.1? Quand est-ce inapproprié?

Répondre

7

Si vous avez défini:

config.time_zone = 'UTC' 

Dans votre environment.rb (il est là par défaut), les temps seront convertis en automagiquement UTC quand les magasins ActiveRecord eux.

Ensuite, si vous définissez Time.zone (dans un before_filter on application.rb est l'endroit habituel) dans le fuseau horaire de l'utilisateur, tous les temps seront automagiquement convertis dans le fuseau horaire de l'utilisateur à partir du stockage utc.

Faites juste attention à Time.now.

Voir aussi:

http://mad.ly/2008/04/09/rails-21-time-zone-support-an-overview/

http://errtheblog.com/posts/49-a-zoned-defense - vous pouvez utiliser la JS ici pour détecter les zones

espoir qui aide.

0

Si votre application a des utilisateurs dans plusieurs fuseaux horaires, vous devriez toujours stocker vos heures en UTC (n'importe quel fuseau horaire fonctionnerait, mais vous devriez rester avec la convention la plus commune).

Laisser l'utilisateur entrer en heure locale, mais convertir en UTC pour stocker (et comparer et manipuler). Puis, revenez de l'UTC à afficher dans le fuseau horaire de chaque utilisateur.