2011-06-22 87 views
1

所以當使用NSCalendar和NSDateComponents從NSDate對象中提取日期組件時,我遇到了一個奇怪的行爲。 如果日期從1970年起爲0秒,那麼本週的組件將返回53. 對於這種解決方法還是解決辦法而不是明顯的模數52方法?NSDateComponents在1970年1月1日返回第53周

這裏是你可以在你的機器上運行測試代碼:

-

(void)testDate { 
    NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:0]; 
    NSDateComponents *comp = [cal components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSWeekCalendarUnit) fromDate:date]; 
    DLog(@"%d/%d/%d week: %d", [comp day],[comp month], [comp year], [comp week]); 

} 

這裏是輸出:

31/12/1969 week: 53 
(gdb) po date 
1970-01-01 00:00:00 +0000 
(gdb) 

回答

0

你我的朋友已經發現了leap week。我已經跑了幾年後做了一些SQL報告。

+0

我必須說我不確定爲什麼1969會有一個閏周。另一方面,它印刷31/12/1969的原因是因爲你處於時區。 – Joe

+0

我沒有添加任何時區計算上面的代碼正是沒有運行調試器,奇怪的是,組件返回一天和一週點1969年的相對一週 –

+0

那麼如何處理飛躍那麼每週/年? –

1

嗯,我得到了這個,

2011-06-22 22:38:50.516 SmallTasks[23164:903] 1/1/1970 week: 1 

所以,我有點被你得到的結果感到驚訝,但我並不感到驚訝,一個week: 53翻起來52 * 7 = 364我們已經365天一年。爲了實現這個目標,我預計這個星期將在1969年的星期日開始,但事實並非如此。

+0

我有類似的結果,我也得到了第1周,但我得到了31/12/1979,但那只是因爲我的本地時區是-0500。 – Joe

+0

在閱讀了更多關於它的信息之後,我對第53周沒有感到驚訝,但仍在檢查爲什麼我有一天會收到組件 –

相關問題