Более гибкий формат в ISO8601DateFormatter Дата

#swift

#swift

Вопрос:

В настоящее время я конвертирую этот формат даты: "2021-11-26T15:48:43Z" в "2021-11-26"

  1. Как я могу его перевернуть? Итак, это выглядит так: 11-26-2021
  2. Что, если бы я хотел получить только время? Нравится: 11:13pm

Это мой код:

 func formatDateToStringMMDDYYYY(tempDay: String) -> String {
    let dateFormatter = ISO8601DateFormatter()
    let timeZone = TimeZone.current
    let date = dateFormatter.date(from: tempDay)
    dateFormatter.timeZone = timeZone
    dateFormatter.formatOptions = [
        .withFullDate,
        .withDashSeparatorInDate
    ]
    let dateFormatted = dateFormatter.string(from: date!)
    
    return dateFormatted
}
 

Я искал ответы в документах Apple, но я не вижу возможности для этого. Есть ли другой способ добиться этого?

Редактировать:

Я попытался переформатировать дату после первоначального формата, но она возвращает ноль, это то, что я пробовал:

 let dateFormatter2 = DateFormatter()
dateFormatter2.dateFormat = "hh:mm a"
dateFormatter2.amSymbol = "AM"
dateFormatter2.pmSymbol = "PM"

let date2 = dateFormatter2.date(from: dateFormatted)
 

Комментарии:

1. Вы можете использовать отдельный форматировщик для форматирования вывода и использовать пользовательский формат даты.

2. Я пробовал это, но он возвращает ноль, см. Мой Отредактированный ответ @JoakimDanielson

3. ISO8601DateFormatter Не знает am / pm ни другого порядка компонентов даты как yyyyMMdd . Вы должны преобразовать return dateFormatter2.string(from: date) .

4. Это сработало! Я готовлю решение и опубликую его, спасибо! @vadian

5. Я, конечно, имел в виду, что вы должны использовать проанализированный объект Date во втором форматере, а не строку.

Ответ №1:

Это решение для преобразования его в AM / PM время, и то же самое относится к другому:

Стиль вывода: 10:48 PM

 func formatIS08601DateToStringHourMin(tempDay: String) -> String {
    let ISO8601DateFormatter = ISO8601DateFormatter()
    let date = ISO8601DateFormatter.date(from: tempDay)
    
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "hh:mm a"
    dateFormatter.amSymbol = "AM"
    dateFormatter.pmSymbol = "PM"
    
    let finalDateFormatted = dateFormatter.string(from: date!)
    
    return finalDateFormatted
}
 

Спасибо @vadian amp; @Joakim_Danielson за помощь.