为什么我的NSDateFormatter在解析时返回nil?
问题描述:
我的代码是这样的为什么我的NSDateFormatter在解析时返回nil?
NSString *tempDate = [NSString stringWithString:tempReviewData.pubDate];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateFormat:@"HH:mm a"];
NSDate *newDate = [dateFormatter dateFromString:tempReviewData.pubDate];
我newDate在这一点上我不知道为什么
答
这似乎为我工作越来越为零,但它取决于tempReviewData.pubDate
格式。
当我使用无效格式,如@"6:30 M"
,我也得到空。
这是工作:
NSString *tempDate = [NSString stringWithString:@"6:30 PM"];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterLongStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setDateFormat:@"HH:mm a"];
NSDate * newDate = [dateFormatter dateFromString:tempDate];
NSString * str = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"date: %@", newDate);
NSLog(@"str: %@", str);
输出:
2010-03-08 22:36:57.904 x[4340:903] date: 1970-01-01 12:30:00 +1000
2010-03-08 22:36:57.905 x[4340:903] str: 22:36 PM
答
NSDate *newDate = [dateFormatter dateFromString:tempReviewData.pubDate];
是否pubDate
返回一个NSString,或一个NSDate?
如果它返回一个字符串,那么你应该重命名该属性以清楚地表明。
如果它返回一个日期(NSDate),那么试图将其解析为一个字符串将不起作用,因为它不是一个字符串;此外,你可以删除所有这些格式化程序代码,因为你已经有了你之后的日期对象。
答
看来NSDateFormatter变得非常挑剔。
-(void)dateFormatterTests {
NSDateFormatter *formatter;
formatter = [[NSDateFormatter alloc] init];
#ifdef WORKS
[formatter setDateFormat:@"yyyy-MM-dd"];
#elif defined(ALSO_WORKS)
[formatter setDateFormat:@"yyyy MM dd"];
[formatter setLenient:YES];
#else // DOESN'T WORK
[formatter setDateFormat:@"yyyy MM dd"];
#endif
// Works per comments above
NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13"]);
// Never works with any of the above formats
NSLog(@"dFS: %@", [formatter dateFromString:@"2010-01-13 22:00"]);
[formatter release]; formatter = nil;
}
您创建该'tempDate'变量和放入它的对象的任何特定原因?你以后不要使用任何一个;您使用从'pubDate'方法返回的原始日期。 –