2009-04-28 89 views
18

我正在使用Time.parse從字符串創建一個Time對象。Ruby Time.parse給我超出範圍錯誤

出於某種原因

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

引起爭論的誤差範圍內我們的,而

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

任何想法?

回答

0

它可能是期待日 - 月 - 年的格式,所以你的第一個值是試圖指定14月的第5天。

26

如果您知道該字符串使用的格式:

Time.strptime(date, format, now=self.now) {|year| ...} 

http://www.ruby-doc.org/core-1.9/classes/Time.html#M000266

這將解決您的問題,可能比Time.parse更快。

編輯:

看起來他們採取了strptime從時間類,但它叫Date.strptime反正。如果你是on Rails的,你可以這樣做:

Date.strptime("05-14-2009 19:00","%m-%d-%Y %H:%M").to_time 

如果使用純Ruby,那麼你需要:

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]) 

另請參見:Date and Time formating issues in Ruby on Rails

+0

strptime看起來很酷,但我得到了一個未定義的Time.strptime方法,我需要一個時間對象 – Tony 2009-04-29 13:50:59

+1

...這裏是用法Time.strptime(date_time ['value'],「%m-%d-%Y %H:%M「) – Tony 2009-04-29 13:51:23

13

這是因爲Time#parse啓發的。

而且這是由於英美格式。

隨着破折號 ' - ',預計MM-DD-YYYY,用斜槓 '/',它預計DD /月/年。

這種行爲改變有意在1.9。完成eur,iso和jp日期標準。

4

你也許並不需要它來解決這個問題,但我還是建議檢查出的自然語言日期/時間解析器Chronic,它爲我節省了大量的工作幾次。