Antworten:
Ich denke, Sie versuchen uns auszutricksen.
Das Eingabedatum für Ihre Frage ist der 25. Oktober 2010 , während das Ausgabedatum der 29. Oktober 2010 ist . Gut gespielt!
Fahren Sie mit diesem Nit-Picking-Thread fort: Ihre Zeiten sind ebenfalls völlig anders und Sie verpassen die Sekunden der Ausgabezeit.
Nun zur wahren Antwort.
Zunächst ein kleines Faktoid: Die Ausgabe von ISO 8601 in Ruby ähnelt der Ausgabe von "Kombiniertes Datum und Uhrzeit" auf der Wikipedia-Seite von ISO 8601 .
Sie haben eine Zeichenfolge und müssen diese in ein Time
Objekt konvertieren, mit dem Sie arbeiten können to_time
. Dann müssen Sie nur noch iso8601
dieses Objekt aufrufen , um die ISO 8601-Version zu erhalten:
"2010-10-25 23:48:46 UTC".to_time.iso8601
Die to_time
Methode wurde von Rails zur Verfügung gestellt, während die iso8601
von Rubys Standardbibliothek zur Verfügung gestellt wurde.
Nach langem Experimentieren finde ich, dass der Parser der Zeitbibliothek besser ist als DateTime, obwohl mir die Gründe im Moment entgehen. Mit dieser Einschränkung verwende ich für solche Dinge immer eher Time als DateTime, und die Ruby-Dokumentation ist auch schwer zu verstehen, warum dies so ist.
require 'time'
puts Time.parse("2010-10-25 23:48:46 UTC").iso8601
"2010-10-25T23:48:46Z"
Time.parse("...").utc.iso8601
Folgendes : Andernfalls erhalten Sie die angehängte Zeit +03:00
oder einen anderen Wert, abhängig von der Zeitzone, mit der die ursprüngliche Zeitzeichenfolge angegeben ist. Ich meine statt Z
.
Hinweis: Sie müssen eine Zeitzeichenfolge in ein Zeitobjekt konvertieren (analysieren), bevor Sie die Methode to_time anwenden können.
ruby-1.9.2-p180 :016 > "2010-10-25 23:48:46 UTC".to_time.iso8601
NoMethodError: undefined method `to_time' for "2010-10-25 23:48:46 UTC":String
from (irb):16
Richtige Vorgehensweise:
irb> ut = DateTime.parse("2010-10-25 23:48:46 UTC")
irb> ut.iso8601
=> "2010-10-25T23:48:46+00:00"
Hinzufügen einer Antwort auf diese super alte Frage, denn wenn Sie Rails verwenden, müssen Sie sie nicht so konvertieren / analysieren, wie es die anderen Antworten hier vorschreiben:
created_at
oder ein updated_at
Attribut), können Sie die Methode für diesen Zeitstempel (z . B. ) direkt aufrufen .iso8601
object.created_at.iso8601
iso8601
Methode akzeptiert auch ein numerisches Argument, um gebrochene Ziffern anzuzeigen. Sie würden dies verwenden, wenn Sie möchten, 2020-04-06T19:16:55.604Z
anstatt 2020-04-06T19:16:55Z
.https://api.rubyonrails.org/v5.2.4/classes/ActiveSupport/TimeWithZone.html#method-i-iso8601