ios - 在 swift 中与 NSDateFormatter 作斗争

标签 ios swift nsdateformatter

我在模拟器和 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/

相关文章:

ios - GMSMapView 显示整个世界地图?

objective-c - 在当前 GMT 上加 +2 或 -6? (苹果手机)

swift - 如何在 Swift 中将字符串 UTC 日期转换为 NSDate

arrays - XCode 6 - SWIFT - 访问数组中的多个项目

swift - 具有相同索引的组排序集

swift - 如何将 swift String 转换为 CFString

iOS NSDateFormatter 在设备上的行为不同

ios - 从其他类访问按钮

ios - 检测硬件静音按钮

ios - 屏蔽 UIView 和自动布局