Wie bekomme ich einen UTC-Zeitstempel in Ruby?
Wie bekomme ich einen UTC-Zeitstempel in Ruby?
Antworten:
time = Time.now.getutc
Begründung: In meinen Augen ist ein Zeitstempel genau das: Ein Zeitpunkt. Dies kann mit einem Objekt genau dargestellt werden. Wenn Sie etwas anderes benötigen, einen Skalarwert, z. B. Sekunden seit der Unix-Epoche, 100-ns-Intervalle seit 1601 oder eine Zeichenfolge für Anzeigezwecke oder zum Speichern des Zeitstempels in einer Datenbank, können Sie diesen problemlos vom Objekt abrufen. Das hängt jedoch sehr stark von Ihrem Verwendungszweck ab.
Zu sagen, dass »ein echter Zeitstempel die Anzahl der Sekunden seit der Unix-Epoche ist«, fehlt ein wenig, da dies eine Möglichkeit ist, einen Zeitpunkt darzustellen, aber es werden auch zusätzliche Informationen benötigt, um überhaupt zu wissen, dass Sie es zu tun haben eine Zeit und keine Zahl. Ein Time
Objekt löst dieses Problem gut, indem es einen Zeitpunkt darstellt und auch explizit angibt, was es ist .
Sie könnten verwenden : Time.now.to_i
.
Die Standardformatierung ist meiner Meinung nach nicht sehr nützlich. Ich bevorzuge ISO8601, da es sortierbar, relativ kompakt und allgemein anerkannt ist:
>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
/usr/share/ruby/2.0/time.rb
.
Normalerweise hat der Zeitstempel keine Zeitzone.
% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
to_f
wird besser sein
Wenn Sie einen für Menschen lesbaren Zeitstempel benötigen (wie dies bei der Schienenmigration der Fall ist), z. " 20190527141340 "
Time.now.utc.to_formatted_s(:number) # using Rails
Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
Was nützt ein Zeitstempel, dessen Granularität in Sekunden angegeben wird? Ich finde es viel praktischer, damit zu arbeiten Time.now.to_f
. Sie können sogar einen werfen to_s.sub('.','')
, um den Dezimalpunkt zu entfernen, oder eine Typumwandlung wie folgt durchführen : Integer(1e6*Time.now.to_f)
.
Integer(1e3*Time.now.to_f)
so dass mein serverseitiger Ruby-Zeitstempel der gleiche war wie clientseitiges JavascriptDate.now()
Time.utc(2010, 05, 17)
time = Time.zone.now()
Es wird funktionieren als
irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
Der richtige Weg ist, a zu tun Time.now.getutc.to_i
, um den richtigen Zeitstempelbetrag zu erhalten, da die einfache Anzeige der Ganzzahl aufgrund von Zeitzonenunterschieden nicht immer mit dem utc-Zeitstempel übereinstimmen muss.