Dans Rails, sauf si vous avez une raison spécifique Il est préférable de s'unifier avec la classe TimeWithZone plutôt qu'avec la classe Time et la classe DateTime.
Il y a trois endroits pour régler le fuseau horaire.
--Système
Utilisez Time.zone.name
pour voir quel fuseau horaire est défini dans application.rb.
# application.rb
config.time_zone = 'Tokyo'
Time.zone.name
=> "Tokyo"
Pour compliquer les choses, le fuseau horaire utilisé dépend de la classe et des méthodes qui lui sont associées.
Par exemple
Time.now
en utilisant la méthode now
associée à la classe Time utilise le fuseau horaire de la variable d'environnement
Time.current
en utilisant la méthode current
associée à la classe Time utilise le fuseau horaire de application.rb.
#La variable d'environnement est utilisée et la classe devient Time
[1] pry(main)> Time.now
=> 2020-07-31 19:39:18 +0900
[2] pry(main)> Time.now.class
=> Time
#application.rb est utilisé et la classe devient TimeWithZone
[3] pry(main)> Time.current
=> Fri, 31 Jul 2020 19:39:35 JST +09:00
[4] pry(main)> Time.current.class
=> ActiveSupport::TimeWithZone
Il existe les méthodes suivantes pour obtenir la date et l'heure actuelles.
En conclusion, il est préférable d'utiliser la classe TimeWithZone 3 ou 4 (car si vous voulez en faire une application internationale, vous pouvez la gérer de différentes manières).
#Le fuseau horaire de la variable d'environnement est utilisé
[1] pry(main)> Time.now
=> 2020-07-31 19:43:14 +0900 #Classe de temps
[2] pry(main)> DateTime.now
=> Fri, 31 Jul 2020 19:43:21 +0900 #Classe DateTime
# application.le fuseau horaire rb est utilisé
[3] pry(main)> Time.current
=> Fri, 31 Jul 2020 19:43:26 JST +09:00 #ActiveSupport::Classe TimeWithZone
[4] pry(main)> Time.zone.now
=> Fri, 31 Jul 2020 19:43:32 JST +09:00 #ActiveSupport::Classe TimeWithZone
J'ai fait référence à l'article suivant. L'article l'explique en détail. https://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c