NSCalendar и NSDateComponents возвращают неожиданную дату - PullRequest
0 голосов
/ 12 ноября 2011

Я пытаюсь создать NSDate из NSCalendar и NSDateComponents с:

    NSCalendar *calendar = [NSCalendar currentCalendar];
    [calendar setTimeZone:[NSTimeZone localTimeZone]]; 
    NSDateComponents *components = [[NSDateComponents alloc] init];
    [components setDay:[self.day intValue]];
    [components setMonth:[self.month intValue]];
    [components setYear:[self.year intValue]];
    self.date = [calendar dateFromComponents:components];

Когда день, месяц, год: 9/31/2011 NSDate предназначен для 10/1/2011 .Я установил часовой пояс для NSCalendar после тестирования, который не изменил NSDate.Я также пытался

[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"GMT"]];

, что вернуло мне 9/30/2011 .Кто-нибудь видит ошибку в том, как я это вычисляю?

Спасибо.

1 Ответ

3 голосов
/ 12 ноября 2011

Ну, 31 сентября действительно первое октября.

Но компонент должен знать, в каком календаре работать. Следующий код от apple

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:6];
[comps setMonth:5];
[comps setYear:2004];
NSCalendar *gregorian = [[NSCalendar alloc]
    initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *date = [gregorian dateFromComponents:comps];
[comps release];
...