Невозможно изменить формат даты для моей строковой даты в swift - PullRequest
0 голосов
/ 25 мая 2018

У меня есть строка, в которой она содержит дату («2018-05-10T13: 00: 00»).Но я хочу формат даты "МММ дд, гггг".Итак, я написал код, как показано ниже.

func convertDateStringToDate(longDate: String) -> String{
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "MMM dd, yyyy"
    let date = dateFormatter.date(from: longDate)

    if date != nil {

        let formatter = DateFormatter()
        formatter.dateStyle = .short
        let dateShort = formatter.string(from: date!)

        return dateShort

    } else {

        return longDate
    }
}

и вызываю, как следует

let dateFormattedString = convertDateStringToDate(longDate: (valuesDict.value(forKey: "dateValue") as? String)!)

Но, его печать снова исходное значение, а не обновленный формат.

"2018-05-10T13: 00: 00"

Есть предложения?

Ответы [ 4 ]

0 голосов
/ 25 мая 2018
func formatDate(dateString: String)-> String{
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    if let formattedDate = dateFormatter.date(from: dateString) {
        dateFormatter.dateFormat = "MMM dd, yyyy"
         return dateFormatter.string(from: formattedDate)
    }
    return dateString
}

Просто передайте строку и получите желаемый формат выходной строки.

Примечание. Это будет работать только для формата, указанного в вопросе.

0 голосов
/ 25 мая 2018

Вам необходимо установить строку преобразования> дата в правильном формате, а затем преобразовать дату возврата в строку нужного формата.

 let dateFormatter = DateFormatter()
 dateFormatter = "yyyy-MM-dd'T'HH:mm:ss"
 if let date = dateFormatter.date(from: longDate) {

    dateFormatter.dateFormat = "MMM dd, yyyy"
    return dateFormatter.string(from: date)
 }
0 голосов
/ 25 мая 2018

Вы делаете неправильно то, что сделали dateFormatter.dateFormat = "MMM dd, yyyy", но вам нужно установить dateFormatter, который является датой вашего происхождения ... так что с этого момента вам просто нужно установить "yyyy-MM-dd'T'HH:mm:ss" и получать дату как ваше желание

0 голосов
/ 25 мая 2018

Строка let date = dateFormatter.date(from: longDate) вернет ноль, потому что dateFormatter ожидает, что строка даты будет в формате MMM dd,yyyy.Поэтому, когда вы используете проверку if date != nil, она переходит в часть else.

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

Примерно так будет работать

func convertDateStringToDate(longDate: String) -> String{
    let longDateFormatter = DateFormatter()
    longDateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
    if let date = longDateFormatter.date(from: longDate) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MMM dd, yyyy"
        return dateFormatter.string(from: date)
    } else {
        return longDate
    }
}
...