首页 > 解决方案 > 如何在 c# 中使用 AddYears 方法获得 2 月 29 日

问题描述

我们使用每天运行的作业并在一年前的一天执行一些操作。实际上我们只是使用类似的东西:DateTime.UtcNow.AddYears(1). 但似乎不可能使用这种技术获得 2 月 29 日(例如 2020 年):

var target = new DateTime(2020, 2, 29);
bool result = (target == target.AddYears(-1).AddYears(1));//false

那么是否有可能以某种方式将目标定在未来的 2 月 29 日?

标签: c#.netdatetimeleap-year

解决方案


不,文档指出:

  • 如果 value + DateTime.Year 也是闰年,则返回值代表该年的闰日。例如,如果 2012 年 2 月 29 日加上四年,则返回的日期为 2016 年 2 月 29 日。

  • 如果 value + DateTime.Year 不是闰年,则返回值代表该年闰日的前一天。例如,如果将一年添加到 2012 年 2 月 29 日,则返回的日期为 2013 年 2 月 28 日。

这意味着如果您添加一年,您将始终得到 2 月 28 日。获得第 29 个通孔的唯一方法AddYears是添加 4 的倍数。


推荐阅读