Как я могу конвертировать (2020-02-21 06:07:21 +0000) в «21 февраля 2021 12:00»? - PullRequest
0 голосов
/ 21 февраля 2020

Я использую время устройства, чтобы получить компоненты даты. Это работает нормально для формата 12 часов, но если пользователь меняет время устройства на 24 часа, это показывает неправильные расчеты. использовал следующий метод для преобразования, но он всегда возвращает ноль.

            let dateAsString = "\(Date())"
            let df = DateFormatter()
            df.dateFormat = "yyyy-mm-dd HH:mm:ss zzz"

            let date = df.date(from: dateAsString)
            df.dateFormat = "d MMM yyyy h:mm a"

            let time12 = df.string(from: date!)
            print(time12)

Ответы [ 4 ]

1 голос
/ 21 февраля 2020

Итак, основная проблема, с которой вы столкнулись, заключается в том, что yyyy-mm-dd использует mm, то есть минуты, а не MM, то есть месяцы.

Так что, если вместо этого вы попытались что-то вроде ...

let dateAsString = "\(Date())"
let df = DateFormatter()
df.dateFormat = "yyyy-MM-dd HH:mm:ss zzz"

let date = df.date(from: dateAsString)
df.dateFormat = "d MMM yyyy h:mm a"

let time12 = df.string(from: date!)

это приведет к

21 Feb 2020 6:00 PM

Теперь проблема в том, что вы можете просто сделать

let df = DateFormatter()    
df.dateFormat = "d MMM yyyy h:mm a"
df.string(from: Date())

и получить то же самое результат.

Помните, что Date сам по себе не имеет понятия "формат", помимо того, что обеспечивает его вывод "отладки", поэтому вы не можете изменить формат Date. вместо этого вы используете средство форматирования для «представления» значения Date в некоторой удобочитаемой форме.

1 голос
/ 21 февраля 2020

Я только что попробовал ниже, он отлично работает в обоих случаях. с AM или PM или 24Format, и если вы удалите a в formatter.dateFormat = "dd MMM yyyy HH:mm a", вы получите 24 Формат. Даже я использую это в моем коде.

let someDate = Date()
let formatter = DateFormatter()
formatter.dateFormat = "dd MMM yyyy HH:mm a"
let someDateTime = formatter.string(from: someDate)
print(someDateTime)

Печать:

21 Feb 2020 09:35 AM

0 голосов
/ 21 февраля 2020

Swift-этот ответ помог мне

swift - как преобразовать дату с утра / вечера в 24-часовой формат

// здесь также публикуются мои работы.

  1. У меня был формат устройства в 24ч.
  2. Мне нужно в 12ч.
  3. , поэтому я просто преобразовал объект даты к необходимому формату с этим фрагментом кода. let df = DateFormatter() df.dateFormat = "d MMM yyyy h:mm a" let time12 = df.string(from: Date()) print(time12)
0 голосов
/ 21 февраля 2020

Попробуй,

let str = "2020-02-21 06:07:21 +0000"
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-mm-dd hh:mm:ss zzz"
if let date = formatter.date(from: str) {
    formatter.dateFormat = "dd MMM yyyy hh:mm a"
    let formattedDate = formatter.string(from: date)
    print(formattedDate)
}
...