NSCalendar en NSDateComponents die onverwachte datum retourneren

Ik probeer een NSDate te maken van NSCalendar en NSDateComponents met:

    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];

Wanneer de dag, de maand, het jaar zijn: 9/31/2011 is de NSDate voor 10/1/2011 . Ik heb de tijdzone voor de NSCalendar ingesteld na het testen, wat de NSDate niet veranderde. Ik heb het ook geprobeerd

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

Die me terugbracht 9/30/2011 . Iedereen ziet een fout in de manier waarop ik dit bereken?

Bedankt.

0

1 antwoord

Nou, 31 september is echt oktober eerst.

Maar een component moet weten in welke kalender hij moet werken. De volgende code is van 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];
3
toegevoegd
toegevoegd de auteur giuseppe, de bron