为何DateTime.AddMonths(3).AddMonths(3)与AddMonths(6)结果不同?
为什么两次
AddMonths(3)和一次AddMonths(6)结果不同? 这是因为.NET的DateTime.AddMonths方法有个关键行为规则:当原日期的日数超过目标月份的最大天数时,会自动将日期调整为目标月份的最后一天;如果目标月份存在对应日数,则直接保留该日数。
我们结合你的场景拆解两种操作的过程:
操作一:
DateTime.Today.AddMonths(3).AddMonths(3)(当前日期2023-01-31)- 第一步:2023-01-31 添加3个月,目标月份是4月。4月最多只有30天,原日期的31日超过了这个天数,所以自动调整为2023-04-30。
- 第二步:2023-04-30 添加3个月,目标月份是7月。7月有30日,直接对应得到2023-07-30。
操作二:
DateTime.AddMonths(3 * 2)(即直接添加6个月)
2023-01-31 添加6个月,目标月份是7月。7月有31日,和原日期的日数一致,所以直接得到2023-07-31。
这就是两种操作结果不同的核心原因——分步添加时,第一次调整后的日期会影响第二次计算的起始值,和直接一步添加的逻辑路径不一样。
内容的提问来源于stack exchange,提问作者Blackunknown
相关产品推荐
相关产品推荐

