2016-03-10 190 views
0

DateTime#parse'Mon, 30 Dec 2013 00:00:00 UTC +00:00'錯誤的一週。我選擇了ISO 8601以周爲單位的年和周編號%V(以周爲基礎的年編號爲01..53)。'2013年12月30日'的日期時間解析不正確

隨着格式"%V-%y"

DateTime.parse('Mon, 30 Dec 2013 00:00:00 UTC +00:00').strftime "%V-%y" 
#⇒ "01-13" 

DateTime.parse('Mon, 30 Dec 2013 00:00:00 UTC +00:00').strftime "%W-%y" 
#⇒ "52-13" 

Date.strptime('01-13', '%V-%y') 
#⇒ Tue, 01 Jan 2013 

Date.strptime('52-13', '%V-%y') 
#⇒ Tue, 01 Jan 2013 

Mon, 30 Dec 2013 00:00:00 UTC +00:00"01-13"

但是,如果我使用"%W"格式,結果是正確的("52-13")。

這是什麼?還是我犯了一些錯誤?

+0

我沒有看到任何錯誤,除非你聲稱有什麼不對。哪裏不對? – sawa

+0

@sawa這是不公平的,這個問題已經清楚地說明了,'30-Dec-13'確實不屬於_2013_的_first_ week(第一個LOC)。 – mudasobwa

+0

@mudasobwa這是對的。 '12月30日-30日「是ISO8601年第一季度的第一週,並且是2013年的常規年份,但不是2013年常規年份的第一週。但這與OP的聲稱無關解析是錯誤的。解析實際上沒有錯。但我想你明白髮生了什麼事。 – sawa

回答

1

使用基於周的週數(%V)應該使用基於星期年(%g):

DateTime.parse('Mon, 30 Dec 2013 00:00:00 UTC +00:00').strftime "%V-%g" 
#⇒ "01-14" 
0

cday,cweek和cyear是基於商用日期方法。

commercial:創建一個日期對象,表示給定的星期日期。

因此,一年中的最後幾天可能是新年開始日的同一周。

例如2013年12月的最後日期和2014年1月的開始日期是同一周,所以日期的週數'週一,2013年12月30日00:00:00 UTC +00:00'進入新的一週在一年的所有星期完成後,明年的

所以,

"Mon, 30 Dec 2013 00:00:00 UTC +00:00".to_date.cweek ==> 1 
"Mon, 30 Dec 2013 00:00:00 UTC +00:00".to_date.cwday ==>1 (1st week day of week 1 2014(but date is still of 2013) 
"Mon, 30 Dec 2013 00:00:00 UTC +00:00".to_date.cwyear ==> 2014 

這些都是商用日期,現在檢查,

"Mon, 30 Dec 2013 00:00:00 UTC +00:00".to_date.year ==> 2013 

這是正常的一年。

This has a perfect example

相關問題