Ruby Time.parse gibt mir außerhalb des zulässigen Bereichs Fehler
-
03-07-2019 - |
Frage
Ich Time.parse bin mit einem Time-Objekt aus einem String zu erstellen.
Aus irgendeinem Grund
Time.parse("05-14-2009 19:00")
bewirkt, dass ein Argument unserer Reichweite Fehler, während
Time.parse("05-07-2009 19:00")
nicht
Irgendwelche Ideen?
Lösung
Meine Vermutung wäre, dass sein den zweiten Teil des Strings erwartet (die 14) um den Monat zu sein.
Andere Tipps
Wenn Sie wissen, das Format der Zeichenfolge Verwendung:
Time.strptime(date, format, now=self.now) {|year| ...}
http://www.ruby-doc.org /core-1.9/classes/Time.html#M000266
Es wird Ihr Problem lösen und wird wahrscheinlich schneller als Time.parse
.
EDIT:
Sieht aus wie sie strptime
von Time-Klasse nahm, aber es genannt sowieso Date.strptime
. Wenn Sie auf Rails sind, können Sie tun:
Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time
Wenn Sie reinen Rubin verwenden dann benötigen Sie:
require 'date'
d=Date._strptime("05-14-2009 19:00","%m-%d-%Y %H:%M")
Time.utc(d[:year], d[:mon], d[:mday], d[:hour], d[:min],
d[:sec], d[:sec_fraction], d[:zone])
Siehe auch: Datum und Uhrzeit Formatierung Probleme in Ruby on Rails .
Es ist wegen der Heuristik von Time#parse
.
Und es ist wegen angloamerikanischen Formate.
Mit Strichen '-'. Es erwartet mm-dd-yyyy, mit Schrägstrichen '/' es erwartet dd / mm / yyyy
Dieses Verhalten Änderungen absichtlich in 1.9. eur, iso und jp Datum zu erreichen Standards.
Sie wahrscheinlich brauchen es nicht, dieses Problem zu lösen, aber ich noch empfehlen die natürliche Sprache Datum / Zeit-Parser Check-out Chronic hat es mich gerettet viel Arbeit ein paar mal.
Es wird erwartet, wahrscheinlich Tag-Monat-Jahr-Format, so dass Ihre erste Wert versucht, den fünften Tag des 14. Monats angeben.