Dans mon application.rb
je suis tombé sur le commentaire suivant
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
config.time_zone = 'Eastern Time (US & Canada)'
Comme vous le voyez ci-dessus, j’ai fait config.time_zone
en heure EST. Cependant, toujours lorsque les enregistrements sont créés dans la base de données, il semble que datetime
est stocké au format UTC.
Dans le commentaire ci-dessus, ils disent
... et convertissez automatiquement Active Record dans cette zone ...
Comment puis-je faire cela et où?
En outre, je déploierai ceci sur heroku aussi et je voudrais que le réglage soit reporté
ajouter ce qui suit à application.rb
fonctionne
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local # Or :utc
J'ai décidé de compiler cette réponse car toutes les autres semblent incomplètes.
config.active_record.default_timezone détermine s'il faut utiliser Time.local (si défini sur: local) ou Time.utc (si défini sur: utc) lors de l'extraction des dates et des heures de la base de données. La valeur par défaut est: utc . http://guides.rubyonrails.org/configuring.html
Si vous souhaitez modifier le Rails fuseau horaire, mais que vous avez toujours enregistrement actif enregistré dans la base de données sous UTC, utilisez
# application.rb
config.time_zone = 'Eastern Time (US & Canada)'
Si vous souhaitez modifier Rails _ fuseau horaire ET avoir Enregistrement actif enregistrer des heures dans ce fuseau horaire, utilisez
# application.rb
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local
Attention: vous devriez vraiment y réfléchir à deux fois, voire même trois fois, avant de sauvegarder vos temps dans la base de données dans un format autre que UTC.
Remarque
N'oubliez pas de redémarrer votre serveur Rails après avoir modifiéapplication.rb
.
Rappelez-vous que config.active_record.default_timezone
ne peut prendre que deux valeurs
config.time_zone
)Voici comment vous pouvez trouver tous les fuseaux horaires disponibles
rake time:zones:all
Je suis arrivé à la même conclusion que Dean Perry après beaucoup d'angoisse. config.time_zone = 'Adelaide'
et config.active_record.default_timezone = :local
était la combinaison gagnante. Voici ce que j'ai trouvé pendant le processus.
Dans mon cas (Rails 5), j'ai fini par ajouter ces 2 lignes dans mon app/config/environments/development.rb
config.time_zone = "Melbourne"
config.active_record.default_timezone = :local
C'est tout! Et pour m'assurer que Melbourne était bien lu, j'ai lancé la commande dans mon terminal:
bundle exec rake time:zones:all
et Melbourne était dans le fuseau horaire dans lequel je me trouve!
Si vous souhaitez définir le fuseau horaire sur UTC globalement, vous pouvez effectuer les opérations suivantes dans Rails 4:
# Inside config/application.rb
config.time_zone = "UTC"
config.active_record.default_timezone = :utc
Assurez-vous de redémarrer votre application ou vous ne verrez pas les modifications.
Sur Rails 4.2.2, accédez à application.rb
et utilisez config.time_zone='city'
(par exemple, «Londres», «Bucarest» ou «Amsterdam», etc.).
Il devrait fonctionner parfaitement. Cela a fonctionné pour moi.
Je devais ajouter ce bloc à mon fichier environment.rb
et tout allait bien :)
Rails.application.configure do
config.time_zone = "Pacific Time (US & Canada)"
config.active_record.default_timezone = :local
end
Rails.application.initialize!
pour les utilisateurs chinois, ajoutez simplement deux lignes ci-dessous pour vous config/application.rb
:
config.active_record.default_timezone = :local
config.time_zone = 'Beijing'