月末计算

vdh*_*ant 15 .net c# logic datetime date

只是想知道是否知道以下的优雅解决方案.

如果我有2009年6月30日,我加上一个月,我希望它到2009年7月31日,而不是2009年7月30日.

这个逻辑基于这样一个事实,即2009年6月30日是6月底,当我加上一个月时,我想要到下个月底.

但如果我在2009年6月29日和我增加一个月,它应该到2009年7月29日.

注意我需要能够添加任意数月,我需要考虑闰年.

此外,我知道这里的逻辑是有问题的,但它是一个业务需求,与月合约要到月底在未来一个月的结束工作.

我想过几个解决方案,但没有一个非常优雅.因此我觉得有人可能会有更好的方法.

干杯安东尼

Jim*_*mmy 34

要检查日期是否是月末,请检查第二天是否是某个月的第一天.你的算法应该是"如果这一天不是月末,加1个月.如果是月末,加一天,加一个月,减去一天."

    bool IsEndOfMonth(DateTime date) {
        return date.AddDays(1).Day == 1;
    }
    DateTime AddMonthSpecial(DateTime date) {
        if (IsEndOfMonth(date))
            return date.AddDays(1).AddMonths(1).AddDays(-1);
        else
            return date.AddMonths(1);
    }
Run Code Online (Sandbox Code Playgroud)