2016-09-30 87 views
3

這個今天剛拿到我的紅寶石控制檯的另一日期:紅寶石2.3.1 Date.parse返回時,分離器是空間字符

$ irb 
2.3.1 :001 > require 'date' 
=> true 
2.3.1 :002 > Date.parse '30/08/2016' 
=> #<Date: 2016-08-30 ((2457631j,0s,0n),+0s,2299161j)> 
2.3.1 :003 > Date.parse '30 08 2016' 
=> #<Date: 2016-09-30 ((2457662j,0s,0n),+0s,2299161j)> 
2.3.1 :004 > 

用空格分隔(日期被格式化像這樣從工作的電子表格.. 。不要問爲什麼..hehe),它給了我一個月後的日期!

我錯過了什麼?或者我不應該指望一個正確的日期,因爲我傳遞的是無效的格式?

+0

它實際上沒有關閉的一個'Date.parse('30 01 2016' )'給我'#<日期:2016年9月30日((2457662j,0,0N),+ 0,2299161j) >'。看起來它只是使用當前月份。 – Rashmirathi

+3

其實今年只是正確的,因爲今年也是這樣。 'Date.parse'01 01 2015''給我'''。看起來像一旦它分析它認爲它無效的第一個空間,並使用當前月/年。 – Rashmirathi

回答

2

使用Date.strptime相反,它可能需要一個模板來解析輸入

Date.strptime('30 08 2016', '%d %m %Y') 
=> #<Date: 2016-08-30 ((2457631j,0s,0n),+0s,2299161j)> 

剛剛重新迭代我的意見,它看起來像Date.parse後第一空間忽略輸入和只是使用當前的月份和年份。

Date.parse '01 01 2015' 
=> #<Date: 2016-10-01 ((2457663j,0s,0n),+0s,2299161j)> 

有趣的是,如果你拼寫這個月的話,空間是足夠的。

Date.parse '01 jan 2015' 
=> #<Date: 2015-01-01 ((2457024j,0s,0n),+0s,2299161j)>