Swift 日期格式化程序忽略月份

Swift date formatter ignoring months

我写了一个日期重新格式化程序,但似乎 Swift 的日期格式化程序本身忽略了月份。文档说这不应该发生。我如何让它不忽略月份?

let testDate:String = "2020-11-22-11:00"
               
print("start date: ",testDate," reformatted date: ", reformatDate(dateString: testDate))
               

func reformatDate(dateString: String) -> String? {
                   print("dateString: ",dateString)
                   let dateFormatter = DateFormatter()
                   dateFormatter.dateFormat = "yyyy-MM-DD-HH:mm"
                   dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
                   return dateFormatter.string(from: dateString)
                                
}

这会打印:

start date: 2020-11-22-11:00 converted date: 22-01-2020 11:00 AM

它不合理地将所有月份都变成了 1!

您的格式字符串不正确。应该是:

yyyy-MM-dd-HH:mm

dd-MM-yyyy h:mm a

dd 表示月中的第几天,而 DD 表示一年中的第几天。

请注意,您还应该这样做:

dateFormatter.locale = Locale(identifier: "en_US_POSIX")

每当您使用自定义日期格式时。

yyyy-MM-DD-HH:mm 解析 2020-11-22-11:00 意味着您想要 2020 年的第二十天,即 11 月。这没有任何意义,并且 DateFormatter 最终忽略了月份,因为显然一年中的某一天是一个“更强”的日期组件。每年的第 22 天是 1 月 22 日。

然后,当您使用 DD-MM-yyyy h:mm a 格式化解析的日期时,月份部分将显示为 01,而年份仍显示为 22。

这里有一些有用的链接,可帮助您了解格式说明符,lowercase/uppercase 您将了解其中的重要性。