0

我正在尝试从 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。在测试未更改 NSDate 之后,我为 NSCalendar 设置了时区。我也试过

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

这让我回到了9/30/2011。有人看到我计算的方式有错误吗?

谢谢。

4

1 回答 1

3

嗯,9 月 31 日真的是 10 月 1 日。

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

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];
于 2011-11-12T01:04:03.297 回答