0
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];

NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@",dateString);


// Retrieve NSDate instance from stringified date presentation
NSDate *dateFromString = [dateFormatter dateFromString:dateString];

// Create and initialize date component instance
NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
[dateComponents setDay:2];

// Retrieve date with increased days count
NSDate *newDate = [[NSCalendar currentCalendar]
                   dateByAddingComponents:dateComponents
                   toDate:dateFromString options:0];

NSLog(@"Original date: %@", [dateFormatter stringFromDate:dateFromString]);
NSLog(@"New date: %@", [dateFormatter stringFromDate:newDate]);

输出

   2013-05-17
   Original date: 2013-05-17
    New date: 1412647-09-06

我增加了 2 天。新日期应该是“2013-05-19?。谁能告诉我我错了什么?提前谢谢。

4

2 回答 2

1

init方法NSDateComponents不初始化组件。因此,例如,年是未定义的。形成 Apple 的文档:

An instance of NSDateComponents is not responsible for answering questions about a date beyond the 
information with which it was initialized. For example, if you initialize one with May 6, 2004,   
its weekday is NSUndefinedDateComponent
于 2013-05-17T11:33:40.923 回答
1

我假设您忘记初始化day变量。如果你添加

NSUInteger day = 2;

然后你的代码在我的测试程序中产生预期的结果。

于 2013-05-17T12:01:35.927 回答