NSCalendar和NSDateComponents返回意外日期

时间:2011-11-12 00:50:40

标签: objective-c cocoa nsdate nscalendar nsdatecomponents

我正在尝试使用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"]];

这让我回来了 2011年9月30日。有人在我计算这个问题的方式上看到了错误吗?

感谢。

1 个答案:

答案 0 :(得分:3)

那么,9月31日真的是10月10日。

但是组件必须知道要在哪个日历中工作。以下代码来自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];