我正在尝试从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/