在 swift 中与 NSDateFormatter 作斗争
struggling with NSDateFormatter in swift
我在模拟器和 iPhone 6+ 中的真实 运行 和 swift 中的 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
}
}
出于某种原因,在模拟器上 运行s OK 但是当 运行ning 从 Xcode 在我的 iPhone 上我从
得到 nil
dateFormatter.dateFromString(self)
我得到的字符串示例:"Fri, 19 Jun 2015 15:52"
任何想法为什么它在 iPhone?
中失败
将日期字符串解析为日期对象时的不同行为是由您的设备和模拟器上的不同语言环境引起的。根据不同的语言环境,您需要相应地更改日期格式。
如果您获取的日期字符串是由您的后端服务器设置的,您需要确保它设置为 ISO 8601 格式(例如 2015-08-02T21:50:49Z),以便它可以在任何语言环境中都可以轻松解析并转换为日期对象。
终于搞定了,问题出在这行:
dateFormatter.locale = NSLocale.currentLocale()
我在其中设置了 currentLocale,在我固定到特定语言环境而不是默认语言环境的那一刻(在 iPhone 和 mac 中显然不一样,所以对于每个都有不同的值)。
将行更改为:
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
问题已解决,现在扩展按预期工作。
我在模拟器和 iPhone 6+ 中的真实 运行 和 swift 中的 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
}
}
出于某种原因,在模拟器上 运行s OK 但是当 运行ning 从 Xcode 在我的 iPhone 上我从
得到 nildateFormatter.dateFromString(self)
我得到的字符串示例:"Fri, 19 Jun 2015 15:52" 任何想法为什么它在 iPhone?
中失败将日期字符串解析为日期对象时的不同行为是由您的设备和模拟器上的不同语言环境引起的。根据不同的语言环境,您需要相应地更改日期格式。
如果您获取的日期字符串是由您的后端服务器设置的,您需要确保它设置为 ISO 8601 格式(例如 2015-08-02T21:50:49Z),以便它可以在任何语言环境中都可以轻松解析并转换为日期对象。
终于搞定了,问题出在这行:
dateFormatter.locale = NSLocale.currentLocale()
我在其中设置了 currentLocale,在我固定到特定语言环境而不是默认语言环境的那一刻(在 iPhone 和 mac 中显然不一样,所以对于每个都有不同的值)。 将行更改为:
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
问题已解决,现在扩展按预期工作。