无法使用日期部分从NSString创建NSDate

时间:2014-11-09 20:49:37

标签: objective-c ios7 nsdate nsdateformatter

我有一个应用程序(iOS 7.1.1和XCode 5.1),我试图从另一个日期的部分创建日期(文本字段中缺少日期或时间)。这是我的代码:

//  get recurring start and stop dates
NSArray *dateParts = [avc.boApptStart.text componentsSeparatedByString:@" "];
NSLog(@"\n\ndateParts: %@", dateParts);  //  dateParts: ("2014-11-07", "09:00", AM)

dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"yyyy-MM-dd HHmm a"];
NSString *tempRecurrsString = [NSString stringWithFormat:@"%@ %@ %@",avc.oRecurrsStart.text, [dateParts objectAtIndex: 1], [dateParts objectAtIndex: 2]];
NSDate *recurrsStartDate = [dateFormatter dateFromString: tempRecurrsString];
NSLog(@"\n\nreccurrsStartDate: %@  avc.oRecurrsStart.text: %@",[dateFormatter stringFromDate:recurrsStartDate], avc.boApptStart.text);

tempRecurrsString = [NSString stringWithFormat:@"%@ %@ %@",avc.oRecurrsEnd.text, [dateParts objectAtIndex: 1], [dateParts objectAtIndex: 2]];
NSDate *recurrsEndDate = [dateFormatter dateFromString: tempRecurrsString];
NSLog(@"\n\nrecurrsEndDate: %@  tempDateString: %@",[dateFormatter stringFromDate:recurrsEndDate], tempRecurrsString);

这是控制台中显示的上述代码的编辑结果(删除的应用程序名称等):

reccurrsStartDate: (null)  
avc.oRecurrsStart.text: 2014-11-07 09:00 AM

recurrsEndDate: (null)  
tempDateString: 2014-12-31 09:00 AM

问题是:为什么不转换为NSDate?我想我所有的部件都正确连线,而对于我的生活,我无法看到我已经忘记的东西。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

首先,您在:[dateFormatter setDateFormat:@"yyyy-MM-dd HHmm a"];之间的HH内错过了mm。 其次,你应该使用hh,这是12小时而不是HH,这是24小时。

所以最后的字符串最终为:
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm a"];

有关日期格式的详细信息,请查看ICU User Guide