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
相关产品推荐
相关产品推荐

