2016-08-04 22 views
-2

Ich bin schwer zu finden, eine NSDate von String zu analysieren, wo, wenn es schief geht es die App zum Absturz bringen.NSDate von String (sicher)

Als Beispiel würde der folgende Tag zu einem Absturz führen: Mi 12 Marc 2014 17.13.54 00000 \ n \ t \ t \ t \

ich zur Zeit des folgenden Code verwenden:

let trimmed = unformatedDate.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 

let dateFormatter = NSDateFormatter() 

dateFormatter.dateFormat = "E, dd MMM yyyy HH:mm:ss zzzz" 

if let tempDate = dateFormatter.dateFromString(trimmed) { 

     print(tempDate) 

} else { print("We have an error with the tempCreatedDate") } 

Irgendwelche Vorschläge?

+0

Sie sagen, Sie wollen, dass es die App zum Absturz zu bringen, wenn es scheitert? – dan

+0

@NDoc, das Beispieldatum des OPs ist ein Beispiel für eine Zeichenfolge, die nicht konvertiert werden könnte. –

+0

Das ist richtig. –

Antwort

0

Das sollte keinen Absturz verursachen. Stattdessen gibt die Methode dateFromString ein optionales Objekt zurück, das nil lautet, wenn die Eingabezeichenfolge nicht mit dem angegebenen Datumsformat übereinstimmt. Sie müssen für diesen Fall defensiv codieren, wie Sie es getan haben.

Wo Sie stürzen würden, wenn Sie das resultierende optionale erzwingen. Sie verwenden optionale Bindung, die eine gute Möglichkeit ist, damit umzugehen.

0

Ihr Problem ist, dass Ihr Datumsformat "dd/MM/yyyy HH:MM:SS" nicht mit Ihrer Datumszeichenfolge "Tue, 12 Jul 2011 20:18:26 GMT" übereinstimmt. Sie müssen ein anderes Datumsformat verwenden.

+0

Ich mache mir Sorgen über Randfälle, bei denen ich Daten erhalte, die nicht dem erwarteten Datumsformat entsprechen. –

0

versuchen diesen Code:

func nsDateFromString(myDate:String)-> NSDate{ 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" //format style. Browse online to get a format that fits your needs. 
    let dateString = dateFormatter.dateFromString(myDate) 
    return dateString! 
}