Swift中DateFormatter无法解析特定日期问题求助
问题原因及解决方案
这个问题的核心是夏令时的特殊调整导致的。以欧洲中部时间(CET/CEST)为例,1972年5月28日当天,当地时钟从凌晨1:59直接跳转到3:00,跳过了整个2:00时段。如果你的DateFormatter默认使用了这类存在特殊夏令时调整的时区,当解析对应日期(尤其是包含被跳过时段的时间字符串)时,系统无法找到对应的有效时间点,就会返回nil。
解决方法:
- 指定无夏令时的时区:比如强制使用UTC时区,避开夏令时的影响:
let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" // 匹配你的实际日期格式 dateFormatter.timeZone = TimeZone(identifier: "UTC") let date = dateFormatter.date(from: "1972-05-28") - 启用宽松解析:设置
isLenient为true,让DateFormatter自动将无效时间调整到最近的有效时间点:dateFormatter.isLenient = true - 确认格式完全匹配:确保
dateFormat字符串和输入的日期字符串格式完全对应,避免因格式不匹配导致的解析失败(比如输入只有日期,格式却包含时间部分)。
内容的提问来源于stack exchange,提问作者Tiziano Bruschetta
相关产品推荐
相关产品推荐

