设置正确dateFormat后yyyy-MM-dd HH:mm:ss字符串转Date返回nil求解
日期解析返回nil的常见原因及修复方案
- Locale未固定导致规则被修改
DateFormatter默认使用当前系统的Locale,部分地区的本地化规则会覆盖你指定的日期格式,导致解析失败。解析固定格式的日期时必须手动指定en_US_POSIX这个标准化Locale:
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
这个Locale专门用于处理固定格式的日期字符串解析,不会受系统区域、语言设置的影响。
- 时区不匹配
如果你的日期字符串对应的时区和DateFormatter默认的系统时区不一致,也会触发解析失败,可根据日期字符串的实际时区手动指定:
// 示例:如果日期是UTC时区 dateFormatter.timeZone = TimeZone(abbreviation: "UTC") // 示例:如果日期是东八区时区 dateFormatter.timeZone = TimeZone(secondsFromGMT: 8 * 3600)
- 字符串包含不可见字符
你获取到的creationTs字符串可能前后带有空格、换行符、零宽空格等不可见Unicode字符,解析前先做 trimming 处理即可:
let trimmedDateStr = date.trimmingCharacters(in: .whitespacesAndNewlines) let sentDate = dateFormatter.date(from: trimmedDateStr)
- 格式符大小写不匹配
注意你设置的格式符大小写规则:HH对应24小时制的小时,如果实际返回的字符串是12小时制需要换成hh,如果字符串里带有AM/PM标识还要补充a格式符。你示例里的2021-05-17 12:05:59格式和yyyy-MM-dd HH:mm:ss是匹配的,不需要调整格式符。
内容的提问来源于stack exchange,提问作者user9650660
相关产品推荐
相关产品推荐

