Swift 字符串值转换为奇怪的日期值

Swift String value converted into strange Date value

extension Date {
    func toString() -> String {
        let dateFormatter = DateFormatter()
        
        dateFormatter.dateFormat = "MMMM dd, Y (E)"
        dateFormatter.timeZone = TimeZone(identifier: "UTC")
        
        return dateFormatter.string(from: self)
    }
}

extension String {
    func toDate() -> Date {
        let dateFormatter = DateFormatter()

        dateFormatter.dateFormat = "MMMM dd, Y (E)"
        dateFormatter.timeZone = TimeZone(identifier: "UTC")

        return dateFormatter.date(from: self)!
    }
}

那是我的代码。 我想将我的字符串值转换为正确的日期值。我得到的结果与我想要的完全不同。

这是一个例子:

String : September 09, 2021 (Thu)
Converted Date : 2020-12-24 00:00:00 +0000

我希望它是这样的:

Converted Date : September 09, 2021 (Thu) (or 2021-09-09 00:00:00 +0000)

你能改变吗

dateFormatter.dateFormat = "MMMM dd, Y (E)"

收件人:

dateFormatter.dateFormat = "MMMM dd, yyyy (E)"

您在字符串中传递了全年:2021 年 9 月 9 日(星期四),因此您需要以正确的方式获取 yyyy。

extension String {
    func toDate() -> Date {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "MMMM dd, yyyy (E)"
        dateFormatter.timeZone = TimeZone(identifier: "UTC")
        return dateFormatter.date(from: self)!
    }
}

在这里你可以为所欲为:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM dd,yyyy (E)" // here is your foramt
dateFormatter.timeZone = TimeZone(identifier: "UTC")
guard let date = dateFormatter.date(from: "September 09, 2021 (Thu)") else {
   fatalError()
}
print(date) // output: 2021-09-09 00:00:00 +0000

请注意,您选择的时区应与您的设备时区相匹配。

用以下代码替换您的函数

extension Date {
    func toString() -> String {
        let dateFormatter = DateFormatter()
        
        dateFormatter.dateFormat = "MMMM dd, yyyy (E)"
        dateFormatter.timeZone = TimeZone(identifier: "UTC")
        
        return dateFormatter.string(from: self)
    }
}

extension String {
    func toDate() -> Date {
        let dateFormatter = DateFormatter()

        dateFormatter.dateFormat = "MMM dd,yyyy (E)"
        dateFormatter.timeZone = TimeZone(identifier: "UTC")

        return dateFormatter.date(from: self)!
    }
}

您的 dateFormat 与您的 toDate() 函数

略有不同
  • 已从 MMMM
  • 替换为 MMM
  • 已从 Y
  • 替换为 yyyy

我不知道为什么显示不同的日期,但现在应该可以了