2017-03-13 1 views
3

Ich habe ein Problem mit der Konvertierung der Zeichenfolge zu Datum in swift 3. Hier ist mein Code, es gibt mir einen Nullwert während der Konvertierung.Konvertierung von String nach Datum in swift returns nil

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss +zzzz" 
dateFormatter.locale = Locale.init(identifier: "bg_BG") 

let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")!;` 

Antwort

6

Sie haben den falschen Formatbezeichner für Stunde und Zeitzone festgelegt. Verwenden Sie diese Option:

dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss Z" 
dateFormatter.locale = Locale(identifier: "en_US") 
  • hh bedeutet 12-Stunden-Format, so dass keine Stunde gibt es 15. Verwenden HH statt
  • +zzzz ist ungültig Zeitzone Spezifizierer. Verwenden Sie Z statt
  • Es sei denn, Freitag Fri in Bulgarisch verkürzt wird, verwenden Sie eine englische locale
+1

dieses versucht ** E, HH d MMM yyyy: mm: ss Z ** und ** EEE, dd MMM yyyy HH: mm: ss Z **, Still funktioniert nicht. Im immer noch bekommen ** fataler Fehler: unerwartet gefunden Null beim Auspacken ein optionaler Wert 2017-03-13 08: 52: 50.557530 Dubber [1851: 1317294] fataler Fehler: unerwartet gefunden Null beim Auspacken ein optionaler Wert ** – nikhil

+2

@nikhil Try 'dateFormatter.locale = Locale.current', ich habe keine Ahnung, warum das" bg_BG "nicht funktioniert. – chengsam

+2

Ja, es hat funktioniert Vielen Dank @chengsam und Code Different – nikhil

1

Sie haben ein paar Probleme, erstens, wie durch Code Verschiedene wies darauf hin, müssen Sie HH werden mit 24 lesen Stunden. Aber Sie geben auch ein Gebietsschema an, was bedeutet, dass die "Wort" -Teile auf Bulgarisch, nicht Englisch, sein müssen. Verlassen Sie die Sprache scheint der Standard zu funktionieren:

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss +zzzz" 
//dateFormatter.locale = Locale.init(identifier: "bg_BG") 
let recdate = dateFormatter.date(from:"Fri, 10 Mar 2017 15:03:03 +0530")! 

Wenn Sie bulgarische Tag und Monatsnamen verwenden waren, sollte Ihr Format arbeiten.

dateFormatter.date(from:"нд, 10 март 2017 15:03:03 +0530") 
+2

Ja, es funktioniert Vielen Dank @David Berry – nikhil

Verwandte Themen