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, je suis config.time_zone
arrivé à l'heure EST. Cependant, toujours lorsque les enregistrements sont créés dans la base de données, il semble datetime
être stocké au format UTC.
Dans le commentaire ci-dessus, ils disent
... et effectuez une conversion automatique de l'enregistrement actif vers cette zone ...
Comment puis-je faire ça et où?
De plus, je déploierai également ceci sur heroku et j'aimerais que le paramètre soit reporté
ruby-on-rails
ruby
timezone
rails-activerecord
Omniprésent
la source
la source
Réponses:
J'ai décidé de compiler cette réponse car toutes les autres semblent incomplètes.
Si vous voulez changer le fuseau horaire de Rails , mais que vous continuez à enregistrer Active Record dans la base de données en UTC , utilisez
Si vous souhaitez modifier le fuseau horaire de Rails ET avoir des heures d' enregistrement Active Record dans ce fuseau horaire, utilisez
Attention : vous devriez vraiment réfléchir à deux fois, voire trois fois, avant de sauvegarder les temps dans la base de données dans un format non UTC.
Souvenez-vous que cela
config.active_record.default_timezone
ne peut prendre que deux valeursconfig.time_zone
)Voici comment trouver tous les fuseaux horaires disponibles
la source
datetime
valeurs en UTC dans la base de données, puis de les modifier simplement dans le frontend comme avecmoment.js
ou que suggérez-vous pour afficher ces données dans le fuseau horaire correct pour n'importe quel utilisateur?ajout de suite aux
application.rb
œuvresla source
config.time_zone = 'London'
config.active_record.default_timezone = :local
rails c
-ActiveSupport::TimeZone.all.map(&:name)
config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = 'Central Time (US & Canada)'
mais le définir sur le symbole: local a fait l'affaire.config.active_record.default_timezone
ne devrait être réglé que sur:local
ou:utc
. Je suppose que toute autre chose aurait des résultats inattendus.rake time:zones:all
J'en suis venu à la même conclusion que Dean Perry après beaucoup d'angoisse.
config.time_zone = 'Adelaide'
etconfig.active_record.default_timezone = :local
c'était la combinaison gagnante. Voici ce que j'ai trouvé au cours du processus.la source
Dans mon cas (Rails 5), j'ai fini par ajouter ces 2 lignes dans mon
app/config/environments/development.rb
C'est tout! Et pour m'assurer que Melbourne a été lu correctement, j'ai exécuté la commande dans mon terminal:
bundle exec rake time:zones:all
et Melbourne listait dans le fuseau horaire dans lequel je suis!
la source
Si vous souhaitez définir globalement le fuseau horaire sur UTC, vous pouvez effectuer les opérations suivantes dans Rails 4:
Assurez-vous de redémarrer votre application ou vous ne verrez pas les modifications.
la source
Sur les rails 4.2.2, allez à
application.rb
et utilisezconfig.time_zone='city'
(par exemple: «Londres» ou «Bucarest» ou «Amsterdam» et ainsi de suite).Il devrait fonctionner parfaitement. Cela a fonctionné pour moi.
la source
J'ai dû ajouter ce bloc à mon
environment.rb
dossier et tout allait bien :)Rails.application.initialize!
la source
pour les utilisateurs chinois, ajoutez simplement deux lignes ci-dessous
config/application.rb
:la source
Dans Ruby on Rails 6.0.1, allez dans config > locales > application.rb y agrega lo siguiente:
Vous pouvez voir que je configure le fuseau horaire avec 2 lignes:
J'espère que cela aidera ceux qui travaillent avec Ruby on Rails 6.0.1
la source
Si vous souhaitez que l'heure locale soit définie, ajoutez le texte suivant dans
application.rb
Puis redémarrez votre serveur
la source