Hier biete ich Dir eine kleine Klasse mit einer statischen Funktion, mit der Du problemlos ein String Wert in ein Date Format verwandeln kannst.
Datumsformate:Wednesday, Sep 12, 2018 --> EEEE, MMM d, yyyy 09/12/2018 --> MM/dd/yyyy 09-12-2018 14:11 --> MM-dd-yyyy HH:mm Sep 12, 2:11 PM --> MMM d, h:mm a September 2018 --> MMMM yyyy Sep 12, 2018 --> MMM d, yyyy Wed, 12 Sep 2018 14:11:54 +0000 --> E, d MMM yyyy HH:mm:ss Z 2018-09-12T14:11:54+0000 --> yyyy-MM-dd'T'HH:mm:ssZ 12.09.18 --> dd.MM.yy 10:41:02.112 --> HH:mm:ss.SSS
Das passende Datumsformat habe ich hier fix in den Code gesetzt – das kannst Du natürlich auch noch hübscher machen.
class Tools { public static func ConvertStringToDate(DateValue: String) -> Date { let formatter = DateFormatter() formatter.locale = Locale(identifier: "en_US_POSIX") formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ" let date = formatter.date(from: DateValue) return date! } }
Hier ein Praxisbeispiel. Der String Wert befindet sich in der auskommentierten Zeile. In diesem Beipsiel ging es darum, ein XML-File von einem Websearver auszulesen und ein Wiedervorlagedatum in das richtige Date Format zu bringen. Spätestens beim Debuggen erkennt man das vorliegende Format oder man schaut sich das XML-File einfach online an.
//s["Wiedervorlage"] String? "2020-02-09T15:24:21.693+01:00" let dDate :Date = Tools.ConvertStringToDate(DateValue: s["Wiedervorlage"]!)
Das Setzen des Gebietsschemas auf en_US_POSIX wird beim Parsen von Daten von einem Server dringend empfohlen, um Probleme mit den lokalen Einstellungen des Geräts zu vermeiden. Für einige Hintergrundinformationen darüber gibt bei den TECH NOTES von Apple.
formatter.locale = Locale(identifier: "en_US") formatter.dateStyle = .short formatter.string(from: date) // returns 12/10/2018 //Als Beispiel UK formatter.locale = Locale(identifier: "en_GB") formatter.string(from: date) // returns 10/12/18 //Man beachte das zweistellige Jahr //...wenn wir in Deutschland sind... formatter.locale = Locale(identifier: "de_DE") formatter.string(from: date) // returns 10.12.18 Turns out the periods are the accepted standard. In addition, DateFormatter has already translated names for you, so you don't have to worry about it: //...oder aber in Spanien formatter.locale = Locale(identifier: "es_ES") formatter.dateStyle = .long formatter.string(from: date) // returns "10 de diciembre, 2018"
Über den Autor