将包含AM/PM的NSString转换为NSDate

len*_*ung 0 objective-c ios

也许这是一个老问题,我在这个网站上搜索并发现了一些类似的问题,但我仍然无法解决我的问题.我有一个名为gameDateTimeStr的NSString:"11/12/2013-10:00 PM",我想把它转换为NSDate.我使用了以下代码:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MM/dd/yyyy-HH:mm a"];
[formatter setLocale:[NSLocale currentLocale]];
NSDate *gameDateTime = [formatter dateFromString:gameDateTimeStr];
Run Code Online (Sandbox Code Playgroud)

但是,当打印在consolte上时,其描述为:2013-11-12 05:00:00 +0000
正如您所看到的,日期是正确的,但时间是错误的.请帮我修理一下.

rck*_*nes 5

日期格式化程序有一个问题,首先是24小时格式,HH日期格式的小时数.但是您的示例使用12小时格式并且hh应该使用.

[formatter setDateFormat:@"MM/dd/yyyy-hh:mm a"];
Run Code Online (Sandbox Code Playgroud)

根据您的时区偏移量,日期被正确解析,因为打印的日期NSLog以GMT表示.

从日期对象创建字符串NSDateFormatter时,使用时区来计算正确的时间偏移量.