Ios NSDateFormatter的意外输出

Ios NSDateFormatter的意外输出,ios,objective-c,nsdateformatter,Ios,Objective C,Nsdateformatter,我一直在使用以下NSDateFormatter代码格式化我的日期字符串,输出如下: “2013-02-18 03:23:32.928000+0000” NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; [dateFormatter setTimeZone:timeZone];

我一直在使用以下NSDateFormatter代码格式化我的日期字符串,输出如下: “2013-02-18 03:23:32.928000+0000”

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];    
[dateFormatter setTimeZone:timeZone];    
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS Z"];
这一直有效,直到添加了一个使用欧洲iPhone的用户,其输出更改为: “2013-02-18 02:00:40 AM.118000+0000”

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];    
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];    
[dateFormatter setTimeZone:timeZone];    
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS Z"];

有没有关于格式化程序工作不一致的提示

在iOS文档中,有这样一行:

在iOS中,用户可以覆盖默认的AM/PM而不是24小时 背景这可能会导致NSDateFormatter重写格式字符串 你准备好了

这就是为什么你得到的是AM/PM而不是24小时制

您可以通过覆盖
NSDateFormatter
的区域设置来解决此问题

[dateFormatter setLocale:
 [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]] autorelease];

我怀疑init的版本在您正在使用的类别中——它没有文档记录。请参阅,了解稍有不同的类别。这是因为用户将手机的12/24小时模式设置为与其区域设置的12/24默认模式冲突。您必须将NSDateFormatter的语言环境设置为一个不会以这种不稳定的方式运行的版本——通常是en_US_POSIX。感谢您指出这是一个重复的问题。我仍然认为保持这个问题的活力是有价值的,因为另一个问题的标题没有这个问题那么直接。换句话说,当我遇到这个问题时,我并不认为我的问题的答案是在题为“处理NSDateFormatter区域设置“功能”的最佳方式是什么?”的问题中给出的。请让我知道我应该如何编辑和处理这个问题,使它对每个人都最有用。谢谢