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

iOS Swift转换指定GMT格式字符串为Date失败,求正确dateFormat

问题分析与解决方案

你的dateFormat存在两处问题,导致转换始终返回nil:

1. 未设置固定英文区域(Locale)

DateFormatter默认使用系统当前区域设置,若设备/模拟器语言为非英文环境,它无法识别"Sun"(星期缩写)、"Oct"(月份缩写)这类英文标识。必须强制指定en_US_POSIX——这是一个不受系统语言影响的固定英文区域,专门用于处理标准化的日期字符串。

2. 时区格式符不匹配

原字符串的时区是"GMT"(时区名称),而你使用的Z是匹配数字形式时区偏移(例如+0000)的格式符。对应"GMT"这类时区名称,应使用z(或zzz)作为格式符。


修正后的代码

let formatter = DateFormatter()
formatter.dateFormat = "E, d MMM yyyy HH:mm:ss z" // 将Z替换为z
formatter.locale = Locale(identifier: "en_US_POSIX") // 添加固定英文区域设置
formatter.timeZone = TimeZone(abbreviation: "UTC")

item.dateObject = item.stringDate?.toDate(formatter: formatter)

extension String {
    func toDate(formatter: DateFormatter) -> Date? {
        formatter.date(from: self)
    }
}

修改后即可正确将目标字符串转换为Date对象。

内容的提问来源于stack exchange,提问作者I Don't Tell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:43:13