【问题标题】:How to get time from JSON string using Swift?如何使用 Swift 从 JSON 字符串中获取时间?
【发布时间】:2016-11-03 12:03:49
【问题描述】:

我从头开始尝试并浏览了。可能这个问题已经被问过很多次了。我根据那里的时区解析了城市(例如:马德普拉塔)的天气响应。我想要 HH:mm 格式的时间。以下是 JSON 响应示例。

“日出”:“2016-07-10T08:05:02-0300”,“日落”:“2016-07-10T17:46:29-0300”

我的代码:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
dateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
guard let date = dateFormatter.dateFromString(dateString) else {
    assert(false, "no date from string")
}
dateFormatter.dateFormat = "HH:mm"
//dateFormatter.timeZone = NSTimeZone(name: "UTC")
return dateFormatter.stringFromDate(date)

每当我在标签中打印或显示日期字符串时,时间都会发生变化。我想要确切的回复时间。

我的临时解决办法是

// Begin - Its a temperory solution
        if dateString.contains("T") {
            print("dateString.contains(T)")
            let myArray = dateString.componentsSeparatedByString("T")
            if myArray.count > 0 {
                let str = myArray[1]
                if str.contains("+") {
                    print("(str.contains(+))")
                    let myArr = str.componentsSeparatedByString("+")
                    if myArr.count > 0 {
                        let str1 = myArr[0]
                        if str1.contains(":") {
                            print("str1.contains(:)")
                            let myAr = str1.componentsSeparatedByString(":")
                            if myAr.count > 0 {
                                let str2 = myAr[0]

                                let str3 = myAr[1]

                                let str4 = "\(str2):\(str3)"
                                print(str4)
                                return str4
                            }
                            //print(myAr)
                        }

                    }

                }
                if str.contains("-") {
                    print("(str.contains(-))")
                    let myArr = str.componentsSeparatedByString("-")
                    if myArr.count > 0 {
                        let str1 = myArr[0]
                        if str1.contains(":") {
                            print("str1.contains(:)")
                            let myAr = str1.componentsSeparatedByString(":")
                            if myAr.count > 0 {
                                let str2 = myAr[0]

                                let str3 = myAr[1]

                                let str4 = "\(str2):\(str3)"
                                print(str4)
                                return str4
                            }
                            //print(myAr)
                        }

                    }

                }
            }

        }
        // End - Its a temporary solution

我想要一个更好的解决方案,而不是我的临时解决方案。

编辑1: 正如我所提到的,我希望通过丢弃时区来同时进入 JSON 响应。

请建议我并指导我将来如何处理时区。希望你们明白,我在做什么。对不起我的英语不好。

提前致谢。

【问题讨论】:

  • 谷歌“末日金字塔”。它将帮助您使您的代码更易于阅读/维护。

标签: ios json swift2 nsdateformatter nstimezone


【解决方案1】:

如果你完全不关心时区,你可以简单地把它剪掉:

let sunrise = "2016-07-10T08:05:02-0300"
let sunriseNoTimezone = sunrise.substringToIndex(sunrise.endIndex.advancedBy(-5))

let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)

let date = formatter.dateFromString(sunriseNoTimezone)

print(date)

【讨论】:

    【解决方案2】:

    试试下面的代码行。希望对你有帮助...

    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
    dateFormatter.timeZone = NSTimeZone.systemTimeZone()
    guard let date = dateFormatter.dateFromString(dateString)
    else {
     assert(false, "no date from string")
    }
    dateFormatter.dateFormat = "HH:mm"
    return dateFormatter.stringFromDate(date)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      相关资源
      最近更新 更多