1

因此,当使用 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) 
4

2 回答 2

1

嗯,我得到了这个,

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

所以我对你得到的结果有点惊讶,但我并不感到惊讶,week: 53因为52 * 7 = 364我们一年有 365 天。为此,我预计这一周将从 1969 年的星期日开始,但事实并非如此。

于 2011-06-22T17:13:00.650 回答
0

你我的朋友发现了闰周。几年前,我在做一些 SQL 报告时遇到过这种情况。

于 2011-06-22T16:11:28.103 回答