konnte ich nicht ändern Ich habe gerade den Code meiner App auf Swift 3 migriert und ich bekomme dieses wirklich nervige Problem mit dem DateFormatter (früher NSDateFormatter), das ich nicht mit Swift 2 oder früher bekommen habe.Die Zeitzone für DateFormatter in Swift 3
Das Problem ist, dass ich einen String in ein Date-Objekt und mein Code zu konvertieren, so zu tun, ist so etwas wie,
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let dateStr1 = "2017-02-22"
let date1 = dateFormatter.date(from: dateStr1)
Jetzt das funktioniert gut und wie in Xcode Spielplatz erwartet, aber wenn ich versuche, Führen Sie es von meiner App, Datum1 gibt 2017-02-21 13:00:00 +0000 IE einen Tag in der Vergangenheit und ich brauche date1 zu sein 2017-02-22 fyi, ich bin in Australien, wo ich bin diese Entwicklung machen.
Ich bekomme die Datumszeichenfolge von der Benutzeroberfläche meiner App, und von der Benutzeroberfläche ist 2017-02-22, also muss ich diese Zeichenfolge zu einem Date (oder NSDate) -Objekt in Swift konvertieren.
Ich habe versucht, die Zeitzone und Locale für die DateFormatter, Einstellung
dateFormatter.timeZone = TimeZone(identifier: TimeZone.current.identifier)
dateFormatter.locale = Locale.init(identifier: Locale.current.identifier)
aber noch kein Glück?
Ich mag auch das Datum aus dem Kalender-Komponenten zu schaffen versucht haben,
var dateComponents = DateComponents()
var day = "22"
var month = "02"
var year = "2017"
dateComponents.day = Int(day)!
dateComponents.year = Int(year)!
print(TimeZone.current)
dateComponents.timeZone = TimeZone.current
dateComponents.month = Int(month)!
let userCalendar = Calendar.current
let date1 = userCalendar.date(from: dateComponents)
aber immer noch nicht den richtigen Zeitpunkt bekommen also immer 2017.02.21 statt 2017.02.22 ich auf einige ausgesehen haben der anderen SO Fragen wie
How do you create a swift Date object
Converting date between timezones swift
unter ot ihres. Irgendwelche Ideen, wie ich das gewünschte Ergebnis erreichen kann? Dieser Code funktionierte vor Swift völlig einwandfrei.
Warum denken Sie, dass irgendetwas mit dem Code der ersten 4 Zeilen in Ihrer Frage falsch ist? Es ist in Ordnung und korrekt. – rmaddy
Mitternacht am 22. Februar in Australien ist 13:00 Uhr am 21. UTC Zeit. Da ist nichts falsch. – rmaddy
Fair genug! Ich habe die Frage bearbeitet, um das Problem zu verdeutlichen. – cptdanko