Wie erstellt man einen Datums-Zeitstempel und formatiert ihn als ISO 8601, RFC 3339, UTC-Zeitzone?
Wie erzeugt man einen Datums- und Zeitstempel unter Verwendung der Formatstandards für ISO 8601 und RFC 3339?
Das Ziel ist eine Zeichenkette, die wie folgt aussieht:
"2015-01-01T00:00:00.000Z"
Format:
- Jahr, Monat, Tag, als "XXXX-XX-XX"
- der Buchstabe "T" als Trennzeichen
- Stunde, Minute, Sekunden, Millisekunden, als "XX:XX:XX.XXX".
- der Buchstabe "Z" als Zonenbezeichner für Nullpunktverschiebung, auch bekannt als UTC, GMT, Zulu-Zeit.
Bester Fall:
- Swift-Quellcode, der einfach, kurz und überschaubar ist.
- Sie brauchen kein zusätzliches Framework, Unterprojekt, Cocoapod, C-Code usw. zu verwenden.
Ich habe StackOverflow, Google, Apple, etc. durchsucht und keine Swift-Antwort auf diese Frage gefunden.
Die Klassen, die am vielversprechendsten erscheinen, sind NSDate
, NSDateFormatter
, NSTimeZone
.
Verwandte Fragen und Antworten: https://stackoverflow.com/questions/16254575/how-do-i-get-iso-8601-date-in-ios
Hier ist das Beste, was mir bisher eingefallen ist:
var now = NSDate()
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
println(formatter.stringFromDate(now))
170
3
Swift 4 - iOS 11.2.1 oder höher
Verwendung:
iOS 9 - Swift 3 oder höher
und die Kodierungsstrategie
Spielplatz-Tests
Kodierung
Dekodierung
Denken Sie daran, das Gebietsschema auf "de_US_POSIX" zu setzen, wie in Technical Q&A1480 beschrieben. In Swift 3:
Das Problem ist, dass das Jahr auf einem Gerät, das einen nicht-gregorianischen Kalender verwendet, nicht mit RFC3339/ISO8601 übereinstimmt, es sei denn, Sie geben sowohl die
locale
als auch dietimeZone
und diedateFormat
Zeichenfolge an.Oder Sie können
ISO8601DateFormatter
verwenden, um sich die Mühe zu ersparen,locale
undtimeZone
selbst zu setzen:Für die Wiedergabe in Swift 2, siehe frühere Version dieser Antwort.
In meinem Fall muss ich die Spalte DynamoDB - lastUpdated (Unix-Zeitstempel) in Normalzeit konvertieren.
Der ursprüngliche Wert von lastUpdated war: 1460650607601 - umgewandelt in 2016-04-14 16:16:47 +0000 über: