具有格式字符串的 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+0000
的 NSDate
实例,预期输出为 20160721 16:46
,但在 2 部手机中,输出为 20160712 4:41 p.m.
。
设备是 iPhone 5 和 iOS 9.3。
我尝试在相同型号和相同 iOS 版本的设备中安装,输出是正确的。
谁能告诉我那里发生了什么?
您应该将 timezone
和 locale
设置为您的日期格式化程序,像这样尝试:
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
我们在生产中有一个 iOS 应用程序,我们使用一些自定义格式来表示我们的日期内部表示。
我像这样存储了一个全局日期格式化程序:
static var InternalDateFormatter: NSDateFormatter = {
let dateFormatter: NSDateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyyMMdd HH':'mm"
return dateFormatter
}()
对于 2016-07-21T16:46:51+0000
的 NSDate
实例,预期输出为 20160721 16:46
,但在 2 部手机中,输出为 20160712 4:41 p.m.
。
设备是 iPhone 5 和 iOS 9.3。
我尝试在相同型号和相同 iOS 版本的设备中安装,输出是正确的。
谁能告诉我那里发生了什么?
您应该将 timezone
和 locale
设置为您的日期格式化程序,像这样尝试:
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