Question

I'm trying to create an NSDate from NSCalendar and NSDateComponents with:

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

When the day, month, year are : 9/31/2011 the NSDate is for 10/1/2011. I set the timezone for the NSCalendar after testing which didn't change the NSDate. I also tried

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

Which gave me back 9/30/2011. Anyone see an error in the way I'm calculating this?

Thanks.

Était-ce utile?

La solution

Well, september 31 is really october first.

But a component has to know in which calendar to work. The following code is from 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];
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top