stringFromDate总是NIL

我知道这是一个重复的问题,但在stackoverflow和google上搜索了许多类似的问题后,没有一个解决方案适合我。

我想将从DB收到的日期转换为字符串格式,以便在iPhone应用程序中显示。

我按以下方式将日期转换为字符串,但[dateFormat stringFromDate:beginDate]始终返回nil。

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"MMM dd hh:mm a"]; NSString *dateString = [dateFormat stringFromDate:beginDate]; NSLog(@"date: %@", dateString); [dateFormat release]; 

收到的服务器NSDate具有以下格式:

  2012-05-23 13:06:51.394+1000 

我希望它

  May 25 13:06 PM 

请帮忙。

提前致谢。

您需要先将beginDate字符串转换为实际的NSDate,然后执行以下操作:

 NSString *beginDateString = [arr_data objectAtIndex:1]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSZ"]; NSDate *beginDate = [formatter dateFromString:beginDateString]; [formatter setDateFormat:@"MMM dd hh:mm a"]; NSString *dateString = [formatter stringFromDate:beginDate]; NSLog(@"date: %@", dateString); 

请注意,您在问题中说,您希望它在May 25 13:06 PM输出,但它实际上会在May 25 01:06 PM输出。 (13:06将使用24小时而不是12小时时间,不需要上午/下午。)

beginDate的类型是什么? 如果是NSString,则首先使用NSDateFormatter的dateFromString方法将其转换为NSDate。

EDIT2 :(修正了拼写错误并添加了完整的工作示例)

 NSString *beginDate = @"2012-05-23 13:06:51.394+1000"; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; // Set the format of the dateFormatter to the date format of the server dateFormatter.dateFormat = @"yyyy-MM-dd HH:MM:ss.SSSZ"; // Convert the NSString to NSDate NSDate* date = [dateFormatter dateFromString: beginDate]; // Set the format of dateFormatter to your own format dateFormatter.dateFormat = @"MMM dd hh:mm a"; // Convert NSDate to your own format of date beginDate = [dateFormatter stringFromDate: date]; 

上面的代码没有任何问题,它适用于当前日期。 只需更换

 NSString *dateString = [dateFormat stringFromDate:beginDate]; 

通过

 NSString *dateString = [dateFormat stringFromDate:[NSDate date]]; 

并将工作。

你的beginDate似乎有问题。

可能是你的beginDate的格式就像“2013-09-29 14:57:48.0”,但是dataFormate是

 [dFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"] 

更改为“yyyy-MM-dd HH:mm:ss.0”即可