【问题标题】:struggling with NSDateFormatter in swift迅速与 NSDateFormatter 斗争
【发布时间】:2015-08-06 05:30:25
【问题描述】:

我在模拟器和 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 中失败?

【问题讨论】:

    标签: ios swift nsdateformatter


    【解决方案1】:

    将日期字符串解析为日期对象的不同行为是由您的设备和模拟器上的不同语言环境引起的。根据不同的语言环境,您需要相应地更改日期格式。

    如果您获取的日期字符串是由后端服务器设置的,您需要确保它设置为ISO 8601 格式(例如2015-08-02T21:50:49Z),以便可以轻松解析和转换到任何语言环境中的日期对象。

    【讨论】:

    • 嗨,我无法更改从中获取数据的服务器中的格式,并且很明显我的语言环境有问题,这就是我发布的原因代码,期望得到关于它的建议或我做错了什么,因为我认为我正在处理代码中的语言环境。无论如何感谢您的帮助。
    • 好吧,如果您无法更改服务器响应格式,您也可以尝试对日期格式化程序的区域设置进行硬编码,例如:dateFormatter.locale = NSLocale(localeIdentifier: "en_US")。这应该有效。
    • 如果你看到了,我就是这样做的,我昨天在你的消息之前发布了答案,无论如何谢谢
    【解决方案2】:

    我终于明白了,问题出在一行:

    dateFormatter.locale = NSLocale.currentLocale()
    

    我在其中设置了 currentLocale,在我固定为特定区域设置而不是默认设置的那一刻(在 iPhone 和 mac 中显然不一样,因此对于每个区域都有不同的值)。 将行更改为:

    dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
    

    解决了问题,现在扩展按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-18
      • 2018-05-23
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-30
      相关资源
      最近更新 更多