具有格式字符串的 NSDateFormatter 以短样式输出时间

NSDateFormatter with format string outputs time with short style

我们在生产中有一个 iOS 应用程序,我们使用一些自定义格式来表示我们的日期内部表示。

我像这样存储了一个全局日期格式化程序:

static var InternalDateFormatter: NSDateFormatter = {
    let dateFormatter: NSDateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyyMMdd HH':'mm"
    return dateFormatter
}()

对于 2016-07-21T16:46:51+0000NSDate 实例,预期输出为 20160721 16:46,但在 2 部手机中,输出为 20160712 4:41 p.m.

设备是 iPhone 5 和 iOS 9.3。
我尝试在相同型号和相同 iOS 版本的设备中安装,输出是正确的。

谁能告诉我那里发生了什么?

您应该将 timezonelocale 设置为您的日期格式化程序,像这样尝试:

static var InternalDateFormatter: NSDateFormatter = {
    let dateFormatter: NSDateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyyMMdd HH':'mm"
    dateFormatter.timeZone   = NSTimeZone.localTimeZone()
    dateFormatter.locale     = NSLocale(localeIdentifier: "en_US_POSIX")
    return dateFormatter
}()

使用 en_US_POSIX 语言环境 ID 将始终为您提供 am-pm 美国时间标准。
但您可以选择任何语言环境 ID - https://gist.github.com/jacobbubu/1836273