назначенный инициализатор init()
из ISO8601DateFormatter
делает это:
По умолчанию инициализатор форматирования использует часовой пояс GMT, RF C Стандартный формат 3339 («гггг-мм-дд'тчч: мм: ссZZZZZ») и следующие параметры: withInternetDateTime
, withDashSeparatorInDate
, withColonSeparatorInTime
и withTimeZone
.
Очевидно, что ваша дата не в формате yyyy-MM-dd'T'HH:mm:ssZZZZZ
, потому что она имеет компонент в миллисекундах.
Вам просто нужно добавить параметр withFractionalSeconds
:
let dateString = "2020-03-09T11:53:39.474Z"
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [
.withInternetDateTime,
.withFractionalSeconds,
.withColonSeparatorInTime,
.withDashSeparatorInDate,
.withTimeZone]
if let date = formatter.date(from: dateString) {
print(date)
} else {
print("Could not convert date")
}
Я лично хотелось бы перечислить все варианты, чтобы сделать код более понятным, но вы также можете сделать:
formatter.formatOptions.insert(.withFractionalSeconds)