aby przekonwertować ciąg Date
obiektu:
let string = "2017-01-27T18:36:36Z"
let isoFormatter = ISO8601DateFormatter()
let date = isoFormatter.date(from: string)!
Lub, jeśli trzeba wspierać iOS wersje, które wyprzedzają ISO8601DateFormatter
:
let isoFormatter = DateFormatter()
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
isoFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = isoFormatter.date(from: string)!
(Aby zrozumieć dlaczego ustawiamy locale
dla ISO 8601 data formater, zobacz Apple Technical Q&A 1480.)
Następnie, aby przekonwertować do formatu daty w obsłudze, można użyć osobnego formatowania (lub użyć drugim przykładzie powyżej, można ponownie użyć formatowania, ale należy pamiętać, aby zresetować locale
powrót do Locale.current
):
let formatter = DateFormatter()
formatter.dateStyle = .short
formatter.timeStyle = .medium
let result = formatter.string(from:date)
Uwaga, polecam korzystania z tych parametrów stylu prezentując datę powrotem do użytkownika, a nie do dateFormat
ciąg znaków, więc używa stylów odpowiednich dla ich lokalizacji, zamiast zakładać, że chcą zegara 24-godzinnego i/lub czy używają formatu dd-MM-yyyy
vs MM-dd-yyyy
.
Uwaga, zmiana formatów nieaktualne formater (np zmieniając ciąg dateFormat
) jest stosunkowo kosztowny proces, więc jeśli jesteś wykonywania tego procesu dla wielu dat, nie należy przyjmować jedną DateFormatter
i stale zmienia swój dateFormat
lub style powtarzające się w tę iz powrotem (lub, co gorsza, tworzenie nowych formaterów dla każdej daty). Zamiast tego utwórz jeden formatter według stylu formatu daty i używaj go ponownie w jak największym stopniu.
Potrzebujesz ** formatu ** do konwertowania ciągu ISO8601 do daty i formatu ** wyjścia **, aby przekonwertować datę z powrotem na ciąg znaków, zobacz także http://stackoverflow.com/questions/33277970/how -to-convert-string-to-date-to-string-in-swift-ios? rq = 1, I nie używaj 'NSString' w Swift. – vadian