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

Swift中DateFormatter转换1990-10-21返回nil问题咨询

问题原因
  • 日期格式符使用错误:你代码中使用的YYYY属于ISO 8601标准的「周年纪年」格式符,指代的是该周所属的年份,和常规公历年(自然年)的定义完全不同。如果需要解析普通公历年格式的日期,应该使用小写的yyyy作为年份格式符。
  • 夏令时特殊时间点叠加冲突:1986年到1991年中国大陆曾实行夏令时制度,1990年夏令时的结束时间恰好为10月21日。当天凌晨2点系统会将时钟回拨1小时到1点,该日期在东八区时区下存在时间重叠的特殊情况。错误使用YYYY作为格式符时,日期解析的周年匹配逻辑和该特殊时间点规则冲突,最终返回nil。
解决方案

将日期格式配置修改为使用公历年格式符即可,修改后的代码如下:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"

let date1 = dateFormatter.date(from: "1990-10-20") 
let date2 = dateFormatter.date(from: "1990-10-21") 
let date3 = dateFormatter.date(from: "1990-10-22") 

修改后三个日期都可以正常解析。

是否为系统Bug

不属于系统Bug,是格式符误用和夏令时特殊规则共同作用的结果。其他年份的对应日期不存在该类时间跳变/重叠冲突,因此不会出现解析失败的问题。

内容的提问来源于stack exchange,提问作者Aisenhein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:24:03