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

Swift开发中哪些场景会导致Calendar.current.date(byAdding返回nil

Calendar.current.date(byAdding:value:to:) 返回nil的实际场景

你测试的夏令时切换场景没有返回nil,是因为iOS日历默认开启了宽松计算模式(isLenient = true),会自动将不存在的时间映射到最近的有效时间,不会触发nil返回。实际会触发该方法返回nil的场景主要有以下几类:

  • 计算结果超出当前日历的有效表示范围
    系统内置的所有日历类型都有可表示的时间范围边界,比如常用的公历(格里高利历)的有效范围远小于Date类型的可表示范围,如果你对靠近边界的Date执行超大跨度的加法(比如给公元1年的日期加100万年),超出日历支持范围后就会返回nil。
  • 计算结果超出Calendar手动设置的时间限制
    如果你为当前Calendar手动设置了minimumDate、maximumDate属性,只要加法计算后的结果落在这个限定范围之外,方法就会返回nil。
  • 使用配置异常的Calendar实例
    如果不使用默认的Calendar.current,而是手动创建Calendar实例时传入了非法的标识符、或者手动修改配置导致日历参数冲突,调用该方法时也可能返回nil。
  • 开启严格校验模式后的非法时间场景
    如果你手动将Calendar的isLenient属性设置为false(开启严格校验),此时如果加法计算后的结果落在夏令时切换不存在的时间区间、或是不符合当前历法规则的日期区间,方法就会返回nil。
  • 特殊历法的不存在日期场景
    部分阴阳合历(比如农历、希伯来历)存在特殊的置闰规则,当添加组件后的日期落在历法中不存在的虚拟时间区间时,也可能返回nil。

内容的提问来源于stack exchange,提问作者Cheok Yan Cheng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:05