Iphone 将日期添加到NSDate时,NSDate输出错误
输出Iphone 将日期添加到NSDate时,NSDate输出错误,iphone,objective-c,nsdatecomponents,Iphone,Objective C,Nsdatecomponents,输出 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSString *dateString = [dateFormatter stringFromDate:[NSDate date]]; NSLog(@"%@",dateString); // Retrieve NSDate instance from stringi
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-19”。有人能告诉我我错了什么吗?提前谢谢。NSDateComponents的
init
方法不会初始化组件。因此,例如,年份是未定义的。形成苹果的文档:
2013-05-17
Original date: 2013-05-17
New date: 1412647-09-06
我假设您忘记初始化
day
变量
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
然后,您的代码会在我的测试程序中产生预期的结果。您确定
day
已正确设置为2
?-请发布代码,而不是屏幕截图。是的,正如Matthias所指出的,您从未初始化过NSDateComponents日期。您需要使用NSCalendar Components FromDate来初始化内容。@HotLicks:Compare thee中的第一个示例(清单9)。谢谢大家的回答。我的问题是day。现在我已经解决了。请看一下:您只需设置要添加的组件。因此,我认为这并不能回答问题。
NSUInteger day = 2;