Comment obtenir l'horodatage UTC en Ruby?
Comment obtenir l'horodatage UTC en Ruby?
Réponses:
time = Time.now.getutc
Justification: À mes yeux, un horodatage est exactement cela: un point dans le temps. Cela peut être représenté avec précision avec un objet. Si vous avez besoin d'autre chose, d'une valeur scalaire, par exemple secondes depuis l'époque Unix, intervalles de 100 ns depuis 1601 ou peut-être une chaîne à des fins d'affichage ou de stockage de l'horodatage dans une base de données, vous pouvez facilement l'obtenir à partir de l'objet. Mais cela dépend beaucoup de votre utilisation prévue.
Dire qu '"un horodatage vrai est le nombre de secondes depuis l'époque Unix" manque un peu le point, car c'est une façon de représenter un point dans le temps, mais il a également besoin d'informations supplémentaires pour savoir même que vous avez affaire à une heure et non un nombre. Un Time
objet résout bien ce problème en représentant un point dans le temps et en étant également explicite sur ce qu'il est .
Vous pouvez utiliser: Time.now.to_i
.
Le formatage par défaut n'est pas très utile, à mon avis. Je préfère ISO8601 car il est triable, relativement compact et largement reconnu:
>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
/usr/share/ruby/2.0/time.rb
.
L'horodatage n'a généralement pas de fuseau horaire.
% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
to_f
sera mieux
si vous avez besoin d'un horodatage lisible par l'homme (comme l'a fait la migration des rails) ex. " 20190527141340 "
Time.now.utc.to_formatted_s(:number) # using Rails
Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
À quoi sert un horodatage avec sa granularité donnée en secondes? Je trouve cela beaucoup plus pratique de travailler avec Time.now.to_f
. Heck, vous pouvez même jeter un to_s.sub('.','')
pour se débarrasser du point décimal, ou effectuer une conversion de type comme ceci: Integer(1e6*Time.now.to_f)
.
Integer(1e3*Time.now.to_f)
pour que mon horodatage ruby côté serveur soit le même que le javascript côté clientDate.now()
Time.utc(2010, 05, 17)
time = Time.zone.now()
Cela fonctionnera comme
irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
La bonne façon est de faire une Time.now.getutc.to_i
pour obtenir la quantité d'horodatage appropriée car le simple affichage de l'entier ne doit pas toujours être identique à l'horodatage utc en raison des différences de fuseau horaire.