NSDateComponents ведет себя странно в первую неделю 2012 года - PullRequest
1 голос
/ 04 января 2012

В моем приложении для iOS мне нужно создать неделю на основе текущей даты.

Это часть кода:

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:year];
[components setWeek:week];
[components setWeekday:2];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:components];

В данном конкретном случае 2012 год, а неделя 1. Я ожидаю, что календарь вернется 2012-01-02, так какэто дата понедельника недели 1 / 2012. Но вместо этого он возвращает 2012-12-30.

ОБНОВЛЕНО с помощью часового пояса:

NSDateComponents *components = [[NSDateComponents alloc] init];    
[components setYear:2012];
[components setWeek:1];
[components setWeekday:2];

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorian setTimeZone:[NSTimeZone localTimeZone]];
NSDate *date = [gregorian dateFromComponents:components];

Все еще возвращается 2012-12-30.

1 Ответ

0 голосов
/ 05 января 2012

Я обнаружил, что этот код ведет себя так, как вы ожидаете

[components setYearForWeekOfYear:year];
[components setWeekOfYear:week];
[components setWeekday:2];

Он выглядит правдоподобно, но в документе ничего не сказано, поэтому используйте его на свой страх и риск.^ ^

...