我正在尝试从NSCalendar和NSDateComponents创建一个NSDate:

    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。有人看到我计算此方法的错误吗?

谢谢。

最佳答案

好吧,9月31日确实是10月第一。

但是组件必须知道在哪个日历中工作。以下代码来自苹果

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

关于objective-c - NSCalendar和NSDateComponents返回意外日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8101627/

10-12 00:18