将string转换为NSDate问题:无法识别选中

indexNumber.row的date类似于2012-03-09 23:00:00 +0000 。 我已经尝试了一些不同的方法来让我的date到一个NSDate ,但我不断得到标题错误。

 NSString *inputString = [self.measurements objectAtIndex:indexNumber.row]; // Convert string to date object NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init]; [dateFormatter setDateFormat:@"yyyy-MM-dd"]; NSDate *date = [dateFormatter dateFromString:inputString ]; NSLog(@"date format is: %@", date); 

任何想法,为什么我得到以下错误:

由于未捕获exception'NSInvalidArgumentException',原因:' – [__ NSDate长度]:无法识别的select器发送到实例0x6ca0c60'

你得到这个错误,因为你正在传递一个NSDate对象到dateFromString:

添加一个NSLog ,你会看到:

 NSString *inputString = [self.measurements objectAtIndex:indexNumber.row]; if ([inputString isKindOfClass:[NSDate class]]) { NSLog(@"inputString is of type NSDate"); } 

另外,这里是如何重现你的错误:

 NSString *inputString = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSDate *date = [dateFormatter dateFromString:inputString]; 

这意味着数组self.measurements包含NSDate对象而不是NSString对象。


当你纠正你目前的问题时,你可能会遇到一个新的,因为你不使用正确的date格式。 要parsingtypes为2012-03-09 23:00:00 +0000datestring,您应该使用以下date格式:

 [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss zz"]; 

或者按照sch的build议,或者如果你根本不需要时间,你可以截断你提供给dateFormatter的string。 例如像这样:

 NSDate *date = [dateFormatter dateFromString:[inputString substringToIndex:9]]; 

其中9是一个索引,最多你想要一大块string。