Ich muss den folgenden String in ein DateTime-Objekt analysieren:
30/Nov/2009:16:29:30 +0100
Gibt es eine einfache Möglichkeit, dies zu tun?
PS: Ich möchte den obigen String so wie er ist konvertieren. Der Doppelpunkt nach dem Jahr ist kein Tippfehler. Ich möchte das Problem auch mit Ruby und nicht mit RoR lösen.
%d/%b/%Y:%H:%M:%S %Z
%Y
stimmt es sowohl2015
(wie erwartet) als auch zu,2016-foo-bar
da es stoppt, wenn es angezeigt wird2016
. Dieses Verhalten stimmt mit dem C-Gegenstück überein. Die C-Funktion gibt jedoch die Position des Abgleichsendes zurück (z. B. die erste-
im Fall "2016"), damit wir entscheiden können, ob die Übereinstimmung genau ist. In Ruby wird a zurückgegebenDateTime
, sodass wir nicht sagen können, ob danach noch etwas vorhanden ist.Sollte das nicht auch funktionieren?
quelle
require 'active_support/all'
und dann"30/Nov/2009 16:29:30 +0100".to_datetime
(Sie brauchen eigentlich nicht alle active_support-Erweiterungen, aber viel Glück beim Herausfinden, welche selektiv benötigt werden)to_datetime
hinzugefügt zuString
werden:require 'active_support/core_ext/string/conversions'
Ich hatte Erfolg mit:
quelle
Ich habe verwendet
Time.parse("02/07/1988")
, wie einige der anderen Plakate.Ein interessantes Problem war, dass
Time
es beim Öffnen von IRB standardmäßig geladen wurde, aberTime.parse
nicht definiert wurde. Ich mussterequire 'time'
es zum Laufen bringen.Das ist mit Ruby 2.2.
quelle
Dadurch wird die Zeichenfolge in Datum in Datum / Uhrzeit konvertiert:
quelle
Für chinesische Rails-Entwickler:
quelle
In Ruby 1.8 konvertiert das ParseDate-Modul dieses und viele andere Datums- / Zeitformate. Es wird jedoch nicht elegant mit dem Doppelpunkt zwischen dem Jahr und der Stunde umgegangen. Angenommen, der Doppelpunkt ist ein Tippfehler und tatsächlich ein Leerzeichen, dann:
quelle
Sie können auch eine Datums- / Zeitzeichenfolge mit einer bestimmten Zeitzone analysieren:
quelle