Wie würde ich einen UNIX-Zeitstempel (Anzahl der Sekunden seit 1970 GMT) von einem Date-Objekt in einer Rails-App erhalten?
Ich weiß, dass Time#to_i
ein Zeitstempel zurückgegeben wird, aber das Ausführen Date#to_time
und anschließende Abrufen des Zeitstempels führt zu einer Abweichung von etwa einem Monat (nicht sicher, warum ...).
Jede Hilfe wird geschätzt, danke!
Bearbeiten: OK, ich glaube, ich habe es herausgefunden. Ich habe ein Datum mehrmals in einer Schleife verarbeitet und jedes Mal wurde das Datum aufgrund einer Zeitzoneninkongruenz ein wenig verschoben, was letztendlich dazu führte, dass mein Zeitstempel einen Monat frei war. Trotzdem würde mich interessieren, ob es eine Möglichkeit gibt, dies zu tun, ohne sich darauf zu verlassen Date#to_time
.
quelle
to_utc
date.to_time.utc
ist wahrscheinlich das, was er meinte.Ich bekomme folgendes, wenn ich es versuche:
Der Unterschied zwischen diesen beiden Zahlen ist darauf zurückzuführen, dass
Date
die Stunden, Minuten oder Sekunden der aktuellen Zeit nicht gespeichert werden. Das Konvertieren von aDate
in aTime
führt zu diesem Tag, Mitternacht.quelle
Die vorgeschlagenen Optionen zum Verwenden
to_utc
oderutc
Korrigieren des lokalen Zeitversatzes funktionieren nicht. Für mich hat die VerwendungTime.utc()
richtig funktioniert und der Code umfasst weniger Schritte:vs.
Folgendes passiert, wenn Sie utc nach der Verwendung aufrufen
Date
....... so klar, dass ein Anruf
to_i
den falschen Zeitstempel ergibt.quelle
Lösung für Ruby 1.8, wenn Sie ein beliebiges DateTime-Objekt haben:
quelle
quelle