2009-04-28 3 views
18

Ich verwende Time.parse, um ein Time-Objekt aus einer Zeichenfolge zu erstellen.Ruby Time.parse gibt mir außerhalb des Bereichs Fehler

Aus irgendeinem Grund

Time.parse("05-14-2009 19:00") 

verursacht ein Argument unserer Reichweite Fehler, während

Time.parse("05-07-2009 19:00") 

nicht

Irgendwelche Ideen?

Antwort

0

Wahrscheinlich erwartet Tag-Monat-Jahr-Format, so dass Ihre erste Wert den fünften Tag des 14. Monats angeben will.

26

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 Date.strptime sowieso. 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: Date and Time formating issues in Ruby on Rails.

+0

strptime sieht cool aus, aber ich bekomme eine undefinierte Methode für Time.strptime und ich brauche ein Zeitobjekt – Tony

+1

... hier ist die Verwendung Time.strptime (date_time ['value'], "% m-% d-% Y % H:% M ") – Tony

+0

Sieht aus wie strptime existiert nicht in der Zeit mehr, siehe bearbeiten für alternative – Miquel

13

Es ist wegen der heuristics von Time#parse.

Und es ist wegen anglo-amerikanischen Formaten.

Mit Bindestrichen '-' erwartet es mm-dd-yyyy, mit Schrägstrichen '/' erwartet es dd/mm/yyyy.

Dieses Verhalten ändert absichtlich in 1.9. um eur-, iso- und jp-Datumsstandards zu erfüllen.

+0

Ich denke, die Formate sind hier durcheinander. Mit Bindestrichen '-' erwartet man' dd-mm-yyyy' oder 'yyyy-mm-dd' (im letzteren Fall sind die ersten beiden' y's optional), mit Schrägstrichen '/' erwartet man 'mm/dd/yyyy' (hier sind auch die ersten beiden 'y's optional). –

+2

Ich weiß, das ist eine alte Antwort, aber ich sehe das beschriebene Verhalten nicht. Ich benutze 1.9.2p136. Time # parse interpretiert die Eingabe als TT/MM/JJJJ ob ich '-' oder '/' verwende. –

+0

Mein Kommentar ist nicht korrekt. Für Ruby 1.8.6 und 1.8.7 scheint es "mm/dd/yyyy" und für 1.9.2 ist es "dd/mm/yyyy". Beide Rubys analysieren das Dash-Format als 'TT-MM-JJJJ'. Aber ich bin nicht 100% sicher, ob das nur wegen der Ruby-Version ist, oder ob andere Faktoren auch das Parsing beeinflussen; wie die Datums-, Zeit-, Regions- und/oder Zeitzoneneinstellungen des Computers. –

4

Sie brauchen es wahrscheinlich nicht, um dieses Problem zu lösen, aber ich empfehle immer noch den natürlichen Sprache Datum/Zeit-Parser Chronic auschecken, es hat mir eine Menge Arbeit ein paar Mal gespeichert.

Verwandte Themen