在我的 iOS 应用程序中,我得到的日历事件的日期格式为
20231220T090000
作为响应。我将如何从日期转换此日期时间?
如何将其转换为
20 Dec 2023, 9 AM
?
我无法找出正确的日期格式。
在您的示例中,
20231220T090000
表示以下格式的日期:
yyyyMMdd'T'hhmmss
并且您尝试将其转换为以下格式:
dd MMM yyyy, h a
DateFormatter
解析输入字符串中的日期,然后将其重新格式化为具有目标格式的另一个日期。
这样的东西可以实现你正在寻找的东西:
let inFormat = DateFormatter()
inFormat.dateFormat = "yyyyMMdd'T'hhmmss"
let inDate = inFormat.date(from: "20231220T090000")
let outFormat = DateFormatter()
outFormat.dateFormat = "dd MMM yyyy, h a"
let outString = outFormat.string(from: inDate!)
print(outString) // 20 Dec 2023, 9 AM
您需要一个日期格式化程序来解析输入:
let parsingFormatter = DateFormatter()
parsingFormatter.locale = Locale(identifier: "en_US_POSIX")
parsingFormatter.dateFormat = "yyyyMMdd'T'hhmmss"
顺便说一下,您没有指定输入字符串代表哪个时区。通常是 GMT/UTC/Zulu,在这种情况下,您还需要包括:
parsingFormatter.timeZone = TimeZone(secondsFromGMT: 0)
您需要另一个来生成输出字符串:
let outputFormatter = DateFormatter()
outputFormatter.dateFormat = "dd MMM yyyy',' h a"
顺便说一句,我们通常会避免使用
dateFormat
作为输出字符串,而是使用 dateStyle
和 timeStyle
来代替,例如:
let outputFormatter = DateFormatter()
outputFormatter.dateStyle = .medium
outputFormatter.timeStyle = .short
无论如何,现在您有了两个格式化程序,您可以解析输入并准备输出字符串,如下所示:
let input = "20231220T090000"
if let date = parsingFormatter.date(from: input) {
let result = outputFormatter.string(from: date)
print(result)
}