为什么我的NSDateFormatter有时会使用yyyyMMddHHmmssSSS返回am或pm?

Eth*_*len 5 iphone xcode cocoa-touch objective-c ios4

有时候我的代码会返回am或pm但不总是.大多数时候它只是返回我期望的东西,如:20110815170852164

但其他时候它正在回归:20100412010241 am450

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyyMMddHHmmssSSS"];
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
Run Code Online (Sandbox Code Playgroud)

可能是什么导致了这个?用户iPhone上的具体日期/时间国家/地区设置?我向成千上万的人提出这个问题,而且大多数人都没有回复上午(这是预期的),但其他人则是.为什么?

mop*_*led 15

您描述的问题是一个已知的错误.查看有关stackoverflow问题的一些讨论,你可以在那里找到一些可能的解决方法.

这是huyz对该bug的解释的摘录:

问题来自于NSDateFormatter以某种方式在用户手动选择的12或24小时时间模式中"卡住".因此,如果法国用户手动选择12小时模式,并且应用程序请求NSDateFormatter输出24小时格式"HHmm"的时间,它实际上将以12小时格式接收时间,例如"01:00 PM",好像应用程序已经请求"hhmm aa".如果美国用户手动选择24小时模式,则会发生相反的情况:以12小时格式输出时间"hhmm aa"实际上会让您以24小时格式获得时间,例如"17:00".