NSDateFormatter在设备和模拟器上给出不同的值?什么是解决方法?

Mad*_*dav 5 iphone xcode cocoa-touch nsdateformatter

我使用的是NSDateFormatter,问题在于它的一致性.如果我使用kCFDateFormatterMediumStyle,它在模拟器中给出格式为"2009年11月26日",但在设备上它给出"2009年11月26日".

现在我有了一个问题,这个NSFormatter在不久的将来是否值得信赖,或者来自苹果的更新是否可以再次改变风格?

Dou*_*yle 17

虽然上面提到的另一个答案在技术上是正确的,但它并没有为您提供所需的解决方案.虽然NSDateFormatter默认使用用户区域设置(并且因此不会给您带来有用的结果),但您可以请求特定区域设置以获得一致的结果:

NSDateFormatter *frm = [[NSDateFormatter alloc] init];
[frm setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];

NSLocale *en_US = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[frm setLocale:en_US];
[en_US release];
Run Code Online (Sandbox Code Playgroud)


Dan*_*ull 3

NSDateFormatter 根据设备上的国际设置,将日期格式化为用户的偏好。因此,您永远不能期望该字符串保持一致,因为世界各地的日期显示方式有很多不同。

我发现将日期格式化为字符串(用于提供给网络服务器等)的最佳方法是使用 NSDateComponents 并将其转换为字符串。

  • 这并非100%正确。NSDateFormatter 确实会根据用户的偏好进行格式化,是的,但仅限于指定 kCFDateFormatterMediumStyle 等设置时。如果您愿意,您可以非常轻松地设置精确的格式字符串。 (3认同)