2016-07-01 7 views
0

Ich habe von meinem Ende versucht und auch geblättert. Vielleicht wurde diese Frage schon oft gestellt. Ich analysierte Wetter Antwort der Stadt (ex: Mar del Plata) basierend auf Zeitzone. Ich möchte Zeit in HH: mm Format. Im Folgenden finden Sie die Beispiel-JSON-Antwort.Wie bekomme ich Zeit von JSON String mit Swift?

"Sonnenaufgang": "2016-07-10T08: 05: 02-0300", "Sonnenuntergang": "2016-07-10T17: 46: 29-0300"

Mein Code:

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) 

Immer wenn ich eine Datumszeichenkette im Etikett drucke oder zeige, werden die Stunden geändert. Ich möchte genau die richtige Zeit als Antwort kommen.

Meine temporäre Lösung für die oben ist

// 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 

ich eine bessere Lösung wollen, anstatt meine temporäre.

Edit1: Wie ich bereits erwähnt habe, möchte ich gleichzeitig in JSON Antwort kommen durch Verwerfen der Zeitzone.

Bitte schlagen Sie mir vor und leiten Sie mich, wie Sie in Zukunft mit der Zeitzone umgehen. Ich hoffe, ihr versteht, was ich vorhabe. Tut mir leid für mein schlechtes Englisch.

Vielen Dank im Voraus.

+0

Google "Pyramid of doom swift". Es wird Ihnen helfen, Ihren Code einfacher zu lesen/zu warten. –

Antwort

1

Wenn Sie unbedingt über die Zeitzone sich nicht, Sie es einfach abschneiden kann:

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) 
+0

Vielen Dank, mein Herr – Lion

0

Probieren Sie die folgende Codezeile aus. Hoffe, es wird Ihnen helfen, ...

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) 
+0

Löst das nicht dein Problem? –