【问题标题】:Not able to change Date Format for my string date in swift无法快速更改我的字符串日期的日期格式
【发布时间】:2023-03-26 23:38:02
【问题描述】:

我有字符串,因为它包含日期(“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”

有什么建议吗?

【问题讨论】:

  • 您正在尝试解析 2018-05-10T13:00:00 使用格式MMM dd, yyyy 显然不匹配。另外,请使用本地化格式,而不是像MMM dd, yyyy 这样的硬编码英文格式。
  • "MMM dd, yyyy" 这是我的要求格式。

标签: ios iphone swift nsdateformatter date-format


【解决方案1】:

let date = dateFormatter.date(from: longDate) 行将返回 nil,因为 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
    }
}

【讨论】:

    【解决方案2】:
    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
    }
    

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        你做错了dateFormatter.dateFormat = "MMM dd, yyyy",但你需要设置 dateFormatter 这是你的原始日期..所以从现在开始你只需要设置"yyyy-MM-dd'T'HH:mm:ss" 并根据你的需要获取日期

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-07-04
          • 2011-05-04
          • 2016-06-25
          • 1970-01-01
          • 1970-01-01
          • 2017-12-26
          相关资源
          最近更新 更多