簡體   English   中英

如何使用Swift從JSON字符串獲取時間?

[英]How to get time from JSON string using Swift?

我從頭開始嘗試,也瀏覽了。 可能是這個問題被問過很多次了。 我根據該時區解析了城市(例如馬德普拉塔)的天氣響應。 我想要時間為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

我想要一個更好的解決方案,而不是我的臨時解決方案。

Edit1:正如我提到的,我希望通過丟棄時區來同時進入JSON響應。

請建議我,並指導我將來如何處理時區。 希望你們能理解,我要做什么。 對不起,我的英語不好。

提前致謝。

如果您絕對不關心時區,可以簡單地將其修剪掉:

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)

嘗試下面的代碼行。 希望對您有幫助...

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM