2013-02-14 4 views
1

Mon application.rb:fuseau horaire Rails activerecord

config.time_zone = 'Moscow' 
config.time_zone = "(GMT+04:00) Moscow" 
config.active_record.default_timezone = 'Moscow' 
config.active_record.default_timezone = :local 

Quand je lance cette commande, je reçois:

1.9.3-p362 :001 > Time.now 
=> 2013-02-14 14:18:42 +0400 
1.9.3-p362 :002 > Time.zone.now 
=> Thu, 14 Feb 2013 10:18:52 UTC +00:00 

Donc db je vois 10:18:52 UTC +00: 00. Mais quoi et comment configurer, pour voir cette heure, comme dans Time.Now? (Lors de l'insertion nouvelle ligne db je dois voir le temps, comme indiqué par Time.now, quoi configurer?)

temps du serveur est de Moscou ....

aussi db est mysql

Répondre

5

Vous pouvez utiliser l'heure locale comme ceci:

> current_time = Time.now.utc 
    => 2013-02-14 15:15:58 UTC 
> current_time .localtime 
    => 2013-02-14 10:15:58 -05 hours 

Vous pouvez également utiliser:

Time.now.utc.in_time_zone("Moscow") 

Mais la réponse à votre question, la solution pourrait consister à mettre comme ceci:

config.time_zone = 'Moscow' (don't set this - delete this line) 
config.active_record.default_timezone = :local 

Et aussi vous pouvez utiliser votre heure locale quelque chose comme ceci:

Time.local_time 

J'espère que certaines de ces approches pourraient vous aider à

+0

hm (n'a pas vu le bon moment (avec config.time_zone = 'Moscou' config.active_record.default_timezone =: local – brabertaser19

+0

hm, essayez de supprimer config.time_zone = 'Moscou', si vous êtes à Moscou. Indique le retrait de config.time_zone fonctionne En général, vous pouvez utiliser dans votre modèle quelque chose comme ceci: skip_time_zone_conversion_for_attributes <<: startTime, mais attendons quand vous tester la première option – Aleks

+0

désolé, + -3 heures et va tester .... – brabertaser19

2

Dans votre application.rb inclure ces lignes:

config.time_zone = 'Moscow' 
config.active_record.default_timezone = 'Moscow' 

maintenant que vous avez défini le fuseau horaire:

Time.now 
=> 2013-02-14 11:14:46 +0000 
Time.current 
=> Thu, 14 Feb 2013 15:14:48 MSK +04:00 
user = User.create(name: 'test') 
=> #<User id: 6, name: "test", created_at: "2013-02-14 11:15:00", updated_at: "2013-02-14 11:15:00"> 
user.created_at 
=> Thu, 14 Feb 2013 15:15:00 MSK +04:00 

Comme vous pouvez le voir, en dépit du fait que les rails stocke l'heure comme UCT +0000 (très intelligent btw), l'interface des rails fournit le décalage requis. Si vous appelez un objet, tel que user.created_at, l'heure de la base de données sera compensée pour renvoyer l'heure de la zone.
Il est très utile, car il permet la configuration de différents fuseaux horaires pour différents utilisateurs. L'heure sera enregistrée sans décalage, mais chaque utilisateur aura son fuseau horaire équivalent.

Time.now retour +00: 00, peu importe votre fuseau horaire.
Time.current est la même que Time.zone.now.

+0

où utiliser, quoi utiliser? Donne un exemple! – brabertaser19

+0

config pour toutes les applications .... je ne pensais pas que là je pourrais écrire Time.current – brabertaser19

+0

il ne retourne pas l'heure locale pour created_at! par exemple le temps du serveur est 14-43, mais dans db je vois 10-43 ... Je ne vais pas écrire dans chaque contrôleur Time.zone.now, je pense que quelque chose pourrait être configuré par application.rb – brabertaser19