2011-06-22 64 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周没有感到惊讶,但仍在检查为什么我有一天会收到组件 –

相关问题