Si c'est le cas d = DateTime.now
, comment puis-je convertir «d» en UTC (avec la date appropriée)?
98
d = DateTime.now.utc
Oups!
Cela semble fonctionner dans Rails, mais pas dans Ruby vanille (et bien sûr, c'est ce que la question pose)
d = Time.now.utc
Fonctionne cependant.
Y a-t-il une raison pour laquelle vous devez utiliser DateTime
et non Time
? Time
devrait inclure tout ce dont vous avez besoin:
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
fonctionnera en Ruby standard (c'est-à-dire sans ActiveSupport).
la source
new_offset
L'argument de méthode par défaut est0
déjà. DoncDateTime.now.new_offset
peut être utilisé aussi.Malheureusement, la classe DateTime ne dispose pas des méthodes pratiques disponibles dans la classe Time pour ce faire. Vous pouvez convertir n'importe quel objet DateTime en UTC comme ceci:
Vous pouvez revenir de l'heure UTC à l'heure locale en utilisant:
où
d
est un objet DateTime en heure UTC. Si vous les souhaitez comme méthodes pratiques, vous pouvez les créer comme ceci:Vous pouvez voir cela en action dans la session irb suivante:
Comme vous pouvez le voir ci-dessus, l'objet DateTime initial a un décalage de -04: 00 (heure de l'Est). Je suis à l'heure du Pacifique avec un décalage de -07: 00. L'appel
localtime
comme décrit précédemment convertit correctement l'objet DateTime en heure locale. L'appelutc
de l'objet le convertit correctement en un décalage UTC.la source
Essayez ceci, fonctionne en Ruby :
la source
Vous pouvez définir une ENV si vous voulez que votre
Time.now
etDateTime.now
réponde en heure UTC.la source
En irb:
convertira l'heure en utc. Mais comme indiqué si c'est juste le temps, vous pouvez utiliser:
et obtenez-le tout de suite.
la source
La représentation sous forme de chaîne d'un DateTime peut être analysée par la classe Time.
la source