NSDateComponents возвращает неделю 53 01.01.1970 - PullRequest
1 голос
/ 22 июня 2011

Таким образом, при извлечении компонентов дат из объекта NSDate с использованием NSCalendar и NSDateComponents я столкнулся со странным поведением. Если дата равна 0 с 1970 года, компонент недели вернется 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 ]

1 голос
/ 22 июня 2011

Ну, я понял,

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

Так что я немного удивлен результатом, который вы получили, но я не настолько удивлен, что week: 53 оказался как 52 * 7 = 364 и у нас 365 дней в году. Чтобы это произошло, я ожидал, что неделя начнется в воскресенье 1969 года, но этого не произошло.

0 голосов
/ 22 июня 2011

Вы, мой друг, обнаружили високосную неделю .Я столкнулся с этим, делая пару отчетов SQL пару лет назад.

...