我在模拟器和 iPhone 6+ 中使用 NSDateFormatter 快速运行时遇到了一个奇怪的问题。我正在尝试将 JSON 中获得的特定格式的字符串转换为具有以下扩展名的 NSDate:
extension String {
var asStringDate: NSDate? {
get {
let dateFormatter = NSDateFormatter()
let offsetTime = NSTimeInterval(NSTimeZone.localTimeZone().secondsFromGMT) //support local timezone
dateFormatter.locale = NSLocale.currentLocale()
dateFormatter.dateFormat = "EEE, d MMM yyyy H:mm"
if let date = dateFormatter.dateFromString(self) {
let finalDate = date.dateByAddingTimeInterval(offsetTime) //support local timezone
// if Constants.debug { println("\(self) -> \(finalDate)") } //For debugging purposes
return finalDate
}
println("Error while formating string:'\(self)' to date in String.asStringDate") //For debugging purposes
return nil
}
}
出于某种原因,在模拟器上运行正常,但在 iPhone 上从 Xcode 运行时,我得到 nil
dateFormatter.dateFromString(self)
我得到的字符串示例:“Fri, 19 Jun 2015 15:52” 你知道为什么它在 iPhone 上失败吗?
最佳答案
将日期字符串解析为日期对象时的不同行为是由设备和模拟器上的不同区域设置引起的。根据不同的语言环境,您需要相应地更改日期格式。
如果您获取的日期字符串是由后端服务器设置的,则需要确保它设置在ISO 8601中格式(例如 2015-08-02T21:50:49Z),以便可以轻松解析并转换为任何语言环境中的日期对象。
关于ios - 在 swift 中与 NSDateFormatter 作斗争,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847496/