【问题标题】:Unexpected output from NSDateFormatter [duplicate]NSDateFormatter 的意外输出 [重复]
【发布时间】:2013-02-02 10:55:37
【问题描述】:

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

这一直有效,直到添加了使用欧洲 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"];

关于格式化程序为何无法始终如一地工作的任何提示?

【问题讨论】:

  • 这是因为用户将手机的 12/24 小时模式设置为与区域设置的 12/24 默认值冲突。您必须将 NSDateFormater 的语言环境设置为不会以这种不稳定方式运行的版本——通常是 en_US_POSIX。
  • 感谢您指出这是一个重复的问题。我仍然认为保留这个问题是有价值的,因为另一个问题的标题不像这个问题那么直接。换句话说,当我遇到这个问题时,我不认为我的问题的答案是在一个标题为“处理 NSDateFormatter 语言环境“功能”的最佳方法是什么?”的问题中给出的。请让我知道我应该如何编辑并继续处理这个问题,以使其对每个人都非常有用。谢谢。

标签: ios objective-c nsdateformatter


【解决方案1】:

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

在 iOS 中,用户可以覆盖默认的上午/下午与 24 小时制 环境。这可能会导致 NSDateFormatter 重写格式字符串 你设置。

这就是为什么您使用 AM/PM 而不是 24 小时格式的原因。

您可以通过覆盖 NSDateFormatter 的语言环境来解决此问题。

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

【讨论】:

  • 我怀疑 init 版本属于您正在使用的类别——它没有记录。请参阅 this answer 了解略有不同的类别。
猜你喜欢
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2013-07-07
  • 2021-10-20
  • 2015-08-31
  • 1970-01-01
  • 2015-12-02
  • 1970-01-01
相关资源
最近更新 更多