Ios 下一个NSDateFormatter问题

Ios 下一个NSDateFormatter问题,ios,objective-c,nsdateformatter,Ios,Objective C,Nsdateformatter,我知道有很多类似的问题,我需要更加注意。但我不明白我的情况发生了什么 NSDateFormatter *dateFormatter = [NSDateFormatter new]; [dateFormatter setDateFormat:@"hh:mm:a MM/dd/yyyy"]; NSDate *date = [dateFormatter dateFromString:@"09:21:am 07/22/2014"]; 日期为零。我需要帮助。谢谢。要使用12小时格式进行解析,似乎NSDat

我知道有很多类似的问题,我需要更加注意。但我不明白我的情况发生了什么

NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setDateFormat:@"hh:mm:a MM/dd/yyyy"];
NSDate *date = [dateFormatter dateFromString:@"09:21:am 07/22/2014"];

日期
为零。我需要帮助。谢谢。

要使用12小时格式进行解析,似乎
NSDateFormatter
需要任何12小时的区域设置。 我不知道这是不是一种错误

NSDateFormatter *dateFormatter = [NSDateFormatter new];
[dateFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"es_US"]];
[dateFormatter setDateFormat:@"hh:mm:a MM/dd/yyyy"];
NSDate *date = [dateFormatter dateFromString:@"09:21:am 07/22/2014"];
要查找12小时格式的区域设置,以下代码有助于:

NSArray *locales = [NSLocale availableLocaleIdentifiers];
for(NSString *locale in locales) {
    NSString *fmt = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale localeWithLocaleIdentifier:locale]];
    NSLog(@"%10s:%@", [locale UTF8String], fmt);
}

请参见

我刚刚测试过,它对我有效:date contain 2014-07-22 07:21:00+000谢谢您的帮助。我想格式应该是[formatter setDateFormat:@“yyyy MM dd HH:MM”];而不是[dateFormatter setDateFormat:@“hh:mm:a mm/dd/yyyy”];我认为它不能解决这个问题。我发现它可以在iPhone上运行,而且只有在iPad上才能运行。在我看来,这是因为时区B,将时间视为
hh:mm:a
是非常不标准的。你一般不会用额外的冒号。如果你需要它,尽管去吧,但它是非典型的。你是说
en_US
?这是常用的语言环境。或者
en_US\u POSIX
如中所述。@Rob感谢您的QA,我不知道!看来
en_US\u POSIX
更好。我选择了
es_US
,因为它返回
hha
而不是
dateFormatFromTemplate:@“j”
结果的“ha”。