NSDateComponents于1970年1月1日返回第53周

时间:2011-06-22 16:06:42

标签: objective-c nsdate nscalendar nsdatecomponent

因此,当使用NSCalendar和NSDateComponents从NSDate对象中提取日期组件时,我遇到了一种奇怪的行为。 如果日期是1970年的0秒,则周组件将返回53。 除了显而易见的模数52之外,是否存在对此的探索或解决方法?

这是您可以在您的计算机上运行以进行测试的代码:

-

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

2 个答案:

答案 0 :(得分:1)

我得到了这个,

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

所以我对你得到的结果感到有些惊讶,但是week: 53出现在52 * 7 = 364并且我们一年中有365天并不感到惊讶。为了实现这一点,我希望这一周能在1969年的星期天开始,但事实并非如此。

答案 1 :(得分:0)

你我的朋友发现了leap week。几年前我曾经做过一些SQL报告。