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 您将了解其中的重要性。
我写了一个日期重新格式化程序,但似乎 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 您将了解其中的重要性。