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”即可