You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用中20231220T090000格式日期转可读格式的方法

iOS 日历日期格式转换方案

你拿到的20231220T090000属于ISO 8601的简化无分隔符格式,对应的格式串是yyyyMMdd'T'HHmmss。在iOS中可以通过DateFormatter快速将其转换为20 Dec 2023, 9 AM这种可读格式,具体实现如下:

步骤1:明确输入输出格式规则

  • 输入格式:yyyyMMdd'T'HHmmss
    • yyyy:4位年份
    • MM:2位月份
    • dd:2位日期
    • 'T':固定分隔符(需用单引号包裹)
    • HH:24小时制小时
    • mm:分钟
    • ss:秒
  • 输出格式:dd MMM yyyy, h a
    • dd: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:32:36