[英]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 年的第 22 天,即 11 月。 这是没有意义的,并且DateFormatter
最终忽略了月份,因为显然一年中的某一天是一个“更强”的日期组件。 任何一年的第 22 天是 1 月 22 日。
然后,当您使用DD-MM-yyyy h:mm a
格式化解析的日期时,月份组件显示为01
,而年份仍显示为 22。
这里有一些有用的链接来了解格式说明符,您将了解小写/大写的重要性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.