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

Swift:带时区的字符串转日期失败,求解决方法

解决Swift日期解析失败问题

你的代码解析失败主要有两个原因:

  1. 未设置POSIX区域设置:默认DateFormatter会受系统区域影响,无法正确解析ISO风格的日期字符串,必须指定en_US_POSIX locale来保证解析一致性。
  2. 时区格式符不匹配:输入字符串的时区是+5:30(小时为一位数),而你用的ZZZZZ要求时区是两位小时格式(如+05:30),两者不兼容。

修改后的代码如下:

let timestampString = "2023-10-10 15:30:40.345T+5:30"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS'T'x"

if let timestamp = dateFormatter.date(from: timestampString) {
    dateFormatter.locale = Locale.current
    dateFormatter.dateFormat = "d MMM yyyy"
    let formattedDate = dateFormatter.string(from: timestamp)
    print(formattedDate) // 输出示例:10 Oct 2023
} else {
    print("failed to parse timestamp")
}

关键说明:

  • en_US_POSIX locale:强制DateFormatter使用标准ISO日期解析规则,不受系统语言/区域干扰。
  • 时区格式符x:支持解析±HH:mm格式的时区,包括小时为一位数的情况(如+5:30)。
  • 输出时切换回Locale.current:确保月份缩写(如Oct)符合用户当前系统的语言设置。

内容的提问来源于stack exchange,提问作者Dev Krishna Sadana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:32:43