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

Swift Codable自定义JSONDecoder日期解码策略在非24小时制设备为何失效?

解决日期解析在非24小时制下失败的问题

你的解析器在设备切换为12小时制时失效,核心原因是DateFormatter默认采用设备当前Locale,而该Locale会干扰HH(24小时制小时格式)的解析逻辑。只需给DateFormatter设置固定Locale即可解决:

修改后的解码器代码:

internal func getDecoder() -> JSONDecoder {
    let decoder = JSONDecoder()
    let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX") // 核心修复代码
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    decoder.dateDecodingStrategy = .formatted(dateFormatter)
    return decoder
}

额外说明

  • en_US_POSIX是独立于系统设置的特殊Locale,始终采用24小时制解析HH格式,不受设备时间显示偏好影响。
  • 如果你使用的是iOS 10及以上版本,还可以直接使用系统内置的ISO8601解码策略,代码更简洁且无需手动配置Formatter:
    internal func getDecoder() -> JSONDecoder {
        let decoder = JSONDecoder()
        decoder.dateDecodingStrategy = .iso8601
        return decoder
    }
    
    该策略完全兼容你收到的2022-12-12T16:20:00.000Z格式日期字符串。

内容的提问来源于stack exchange,提问作者rohit phogat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:10:28