2016-09-18 3 views
4

Der folgende Code stürzt in 8 XCode, wenn sie auf iOS 10 läuft (nicht auf früheren iOS-Versionen abstürzen):NSDateFormatter Rückkehr null in IOS10

let dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'" 
dateFormatter.timeZone = NSTimeZone(name: "UTC") 
dateFormatter.locale = NSLocale.currentLocale() 


let date = dateFormatter.dateFromString("2016-09-04T08:32:46.195514289Z")! 

Der Absturz passiert, weil die Datumsformatierer gibt nil zurück. Ich habe versucht, das DateFormat zu spielen und zu ändern, aber das Ergebnis ist immer Null. Hat sich in iOS 10 etwas geändert?

EDIT: gleiche Code funktioniert in der Storyboard, wenn sie mit Swift 3. Laufen Es scheint, dass das Problem mit der Swift 2.3 und iOS 10

+4

kann nicht reproduzieren. Wenn Sie jedoch mit festen Datumsformaten arbeiten, ist es immer eine gute Idee, das Gebietsschema auf "en_US_POSIX" und nicht auf das aktuelle Gebietsschema zu setzen. Das könnte dein Problem lösen. –

+3

In Bezug auf die aktuellen Antworten: Bitte beachten Sie, dass "es für mich funktioniert" nicht als eine akzeptable Antwort gilt, vergleiche http://meta.stackoverflow.com/questions/277923/are-your-code-works-fine-for -me-Antworten-akzeptabel. –

+1

Selbst mit Swift 2.3 kann ich nicht reproduzieren. Haben Sie das POSIX-Gebietsschema ausprobiert? –

Antwort

1

Funktioniert für mich. Obwohl ich Swift bin mit 3:

let df = DateFormatter() 
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'" 
df.timeZone = TimeZone(abbreviation: "UTC") 
df.locale = NSLocale.current 
let date = df.date(from: "2016-09-04T08:32:46.195514289Z") 
print("date: \(date)") 

Drucke:

date: Optional(2016-09-04 08:32:46 +0000) 
0

passiert, ich Ihren Code in einem Spielplatz getestet (musste es Swift konvertieren 3 zu tun dies) und es hat funktioniert. Aber ich merkte, dass in Swift 3 wird die Zeitzone wie folgt initialisiert:

TimeZone(abbreviation: "UTC") 

Diese initializer ist auch in NSTimeZone zur Verfügung, die Sie in Swift 2.x. verwenden können Laut Apples Dokumentation wäre dies der richtige Initialisierer, wenn Sie etwas wie "UTC" oder "GMT" als Name verwenden. Ich bin mir nicht sicher, was wir tun sollen mit init(name:)

+0

@MartinR ich bin dass es in Swift 3 funktioniert hat und eine mögliche Lösung für Swift 2.x lieferte. Meiner Meinung nach heißt das nicht einfach: "Es funktioniert für mich" – FelixSFD