iOS应用中20231220T090000格式日期转可读格式的方法
iOS 日历日期格式转换方案
你拿到的20231220T090000属于ISO 8601的简化无分隔符格式,对应的格式串是yyyyMMdd'T'HHmmss。在iOS中可以通过DateFormatter快速将其转换为20 Dec 2023, 9 AM这种可读格式,具体实现如下:
步骤1:明确输入输出格式规则
- 输入格式:
yyyyMMdd'T'HHmmssyyyy:4位年份MM:2位月份dd:2位日期'T':固定分隔符(需用单引号包裹)HH:24小时制小时mm:分钟ss:秒
- 输出格式:
dd MMM yyyy, h add:2位日期MMM:月份英文缩写(如Dec)yyyy:4位年份h:12小时制小时a:上午/下午标识(如AM/PM)
步骤2:Swift代码实现
import Foundation func transformToReadableDate(_ rawDateString: String) -> String? { // 初始化输入格式化器 let inputFormatter = DateFormatter() inputFormatter.dateFormat = "yyyyMMdd'T'HHmmss" // 可选:指定时区,避免系统时区干扰,比如事件所在时区或UTC // inputFormatter.timeZone = TimeZone(identifier: "Asia/Shanghai") // 解析原始字符串为Date对象 guard let parsedDate = inputFormatter.date(from: rawDateString) else { return nil // 格式不匹配时返回nil,需做容错处理 } // 初始化输出格式化器 let outputFormatter = DateFormatter() outputFormatter.dateFormat = "dd MMM yyyy, h a" outputFormatter.locale = Locale(identifier: "en_US_POSIX") // 确保月份缩写为英文 // 可选:同步输入时区,保证时间一致性 // outputFormatter.timeZone = inputFormatter.timeZone return outputFormatter.string(from: parsedDate) } // 使用示例 if let readableDate = transformToReadableDate("20231220T090000") { print(readableDate) // 输出:20 Dec 2023, 9 AM }
注意事项
- 时区问题:如果日历事件的时区与系统默认时区不同,一定要显式设置
timeZone属性,否则会出现时间偏移。 - 本地化适配:若需要支持其他语言,只需修改
locale和输出格式串即可,但当前需求下用en_US_POSIX能确保英文格式稳定。 - 错误处理:如果原始字符串格式不符合预期(比如长度不对、字符非法),
date(from:)会返回nil,建议在业务代码中添加错误提示或默认值。
内容的提问来源于stack exchange,提问作者Anony
相关产品推荐
相关产品推荐

