日期添加含年/月的可变时长时间间隔的规范方法问询
关于ISO-8601时间间隔与日期计算的疑问
ISO-8601定义了时间间隔的表示方式,例如P1M代表1个月。
不过,该标准并未强制规定如何确定给定日期后1个月的具体日期。
我了解到SQLite的实现逻辑是:针对YYYY-MM-DD格式的日期,添加1个月即直接给月份值(MM)加1,再做标准化处理——如果月份值超过12则年份加1;如果日期值(DD)大于结果月份的天数,则自动进位到下一个月。
但这种方式会产生不一致的计算结果:
- 2020-01-29 + P1M = 2020-02-29
- 2020-01-30 + P1M = 2020-03-01
- 2020-01-31 + P1M = 2020-03-02
- 2020-02-01 + P1M = 2020-03-01 ‽,注意此结果早于前一个计算结果
此外,当时间间隔同时包含月和天这类不同单位时,计算顺序也会影响最终结果:
- 2020-01-30 + P3D + P1M = 2020-02-02 + P1M = 2020-03-02
- 2020-01-30 + P1M + P3D = 2020-03-01 + P3D = 2020-03-04,先加月份得到的结果更晚
问题:当时间间隔包含年或月这类可变时长的单位时,是否存在添加时间间隔到日期的标准规范方法?
内容的提问来源于stack exchange,提问作者Benoit
相关产品推荐
相关产品推荐

