想知道這些投入給了我一些奇怪的事情,而不是2013-05-31 13:30:00 -0400
Time.parse了奇怪的日期
Time.parse("05-31 13:30") => 2013-06-06 16:30:00 -0400
Time.parse("5 31 13:30") => 2013-07-01 13:30:00 -0400
想知道這些投入給了我一些奇怪的事情,而不是2013-05-31 13:30:00 -0400
Time.parse了奇怪的日期
Time.parse("05-31 13:30") => 2013-06-06 16:30:00 -0400
Time.parse("5 31 13:30") => 2013-07-01 13:30:00 -0400
@ SergioTulentsev的評論指出了這個問題。 Date.parse
無法知道人們可能想要構建日期/日期時間值的各種可能組合方式。這就是爲什麼日期支持strptime
,它可以讓你定義模式:
require 'date'
DateTime.strptime("05-31 13:30", '%m-%d %H:%M')
=> #<DateTime: 2013-05-31T13:30:00+00:00 ((2456444j,48600s,0n),+0s,2299161j)>
DateTime.strptime("5 31 13:30", '%m %d %H:%M')
=> #<DateTime: 2013-05-31T13:30:00+00:00 ((2456444j,48600s,0n),+0s,2299161j)>
的問題就變成的使用給定日期字符串,格式字符串之一。在這個測試中,我改變了第二時間字符串所以這是比較明顯的,代碼工作正常:
require 'date'
DATE_PATTERNS = {
/[0-2]\d-\d{2} \d{2}:\d{2}/ => '%m-%d %H:%M',
/[0-2]?\d \d{1,2} \d{2}:\d{2}/ => '%m %d %H:%M'
}
puts ["05-31 13:30", "5 31 13:31"].map { |str|
pattern = DATE_PATTERNS.keys.find { |k|
str[k]
}
puts pattern.source
DateTime.strptime(str[pattern], DATE_PATTERNS[pattern]).to_s
}
,輸出:
[0-2]\d-\d{2} \d{2}:\d{2}
[0-2]?\d \d{1,2} \d{2}:\d{2}
2013-05-31T13:30:00+00:00
2013-05-31T13:31:00+00:00
在你的時間串一年缺少了什麼事。 解析嘗試解決此問題,但失敗。
按照給定的一年 - 像這樣
Time.parse("2013-05-31 13:30")
解析作品。
'Time.parse(「5月31日13點30分」) #=> 2013-05-31 13:30:00 + 0400' - 我想,你的字符串太奇怪了,因爲它是有道理的。 –
哪些區域設置?也許你期待你住的地方出現一些奇怪的時區轉換? –
我期望'05-31 13:30'給我'2013-05-31 13:30',而不是「2013-06-06 16:30:00 -0400」。就像6從哪裏來的? – ovatsug25