Ios 无法更改swift中我的字符串日期的日期格式

Ios 无法更改swift中我的字符串日期的日期格式,ios,iphone,swift,nsdateformatter,date-format,Ios,Iphone,Swift,Nsdateformatter,Date Format,我有一个字符串,因为它包含日期(“2018-05-10T13:00:00”)。 但是,我希望日期格式为“MMM dd,yyyy”。因此,我编写了如下代码 func convertDateStringToDate(longDate: String) -> String{ let dateFormatter = DateFormatter() dateFormatter.dateFormat = "MMM dd, yyyy" let date = dateFormatt

我有一个字符串,因为它包含日期(“2018-05-10T13:00:00”)。 但是,我希望日期格式为“MMM dd,yyyy”。因此,我编写了如下代码

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”


有什么建议吗?

let date=dateFormatter.date(from:longDate)
将返回nil,因为
dateFormatter
希望日期字符串为
MMM dd,yyyy
格式。所以当您使用
if date!=无
check,它进入
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
    }
}

let date=dateFormatter.date(from:longDate)
将返回nil,因为
dateFormatter
希望日期字符串为
MMM dd,yyyyy
格式。所以当您使用
if date!=无
check,它进入
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
    }
}

您需要以正确的格式设置转换字符串->日期,然后将返回日期转换为所需的格式字符串

 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)
 }

您需要以正确的格式设置转换字符串->日期,然后将返回日期转换为所需的格式字符串

 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)
 }

您所做的是错误的,但是您需要设置dateFormatter,它是您的起始日期。因此,从现在起,您只需要设置“yyyy-MM-dd'HH:MM:ss”,并且为了按照您的意愿获取日期,您所做的是错误的但您需要设置dateFormatter,它是您的起始日期。因此,从现在起,您只需设置“yyy-MM-dd'HH:MM:ss”并根据需要获取日期

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
}
只需传递字符串并获得所需的格式输出字符串

注:这仅适用于问题中提到的格式

只需传递字符串并获得所需的格式输出字符串

注意:这仅适用于问题中提到的格式。

您试图使用格式
MMM dd,yyyy
解析
2018-05-10T13:00:00
,显然不匹配。另外,请使用本地化格式和非硬编码的英语格式,如
MMM dd,yyyyy
“MMM dd,yyyy”这是我的要求格式。您正在尝试使用格式
MMM dd,yyyy
解析
2018-05-10T13:00:00
,显然不匹配。此外,请使用本地化格式,而不是硬编码的英语格式,如
MMM dd,yyyy
“MMM dd,yyyy”这是我的要求格式。