如何在一个月内添加天数

本文关键字:添加 一个 | 更新日期: 2023-09-27 18:13:15

我对我的代码很满意,但是还有一个问题。

我有这个代码(简短版本):

if (holidays.Contains(eskalation.Value.Date))
{
    eskalationsZeit = new DateTime(eskalation.Value.Year, eskalation.Value.Month, eskalation.Value.Day + 1, 8, 0, 0);
    if (eskalation.Value.Day == DateTime.DaysInMonth(eskalation.Value.Year, eskalation.Value.Month))
    {
        eskalation = new DateTime(eskalation.Value.Year, eskalation.Value.Month + 1, 1, 8, 0, 0);
        if (eskalation.Value.DayOfWeek == DayOfWeek.Saturday)
        {
              eskalation = new DateTime(eskalation.Value.Year, eskalation.Value.Month + 1, 3, 8, 0, 0);
              }
              else if (eskalation.Value.DayOfWeek == DayOfWeek.Sunday)
              {
                  eskalation = new DateTime(eskalation.Value.Year, eskalation.Value.Month + 1, 2, 8, 0, 0);
              }
        }
}

在这个代码中,我问的是这一天是假日(列表),还是星期六或星期天,如果它是一个月的最后一天,所以我必须改变月份。一切正常,但是-

如果我有一个月的28日有30天,这是一个假期,我将增加1天,所以我有29日。现在29号是星期六,所以我将再添加2天,但此时我得到了异常,因为我添加的天数是这样的:

if (eskalation.Value.DayOfWeek == DayOfWeek.Saturday)
{
    eskalation = new DateTime(eskalation.Value.Year, eskalation.Value.Month, eskalation.Value.Day + 2, 8, 0, 0);
}

因此结果将是只有30天的一个月的第31天。

如何在一个月内添加天数?比如-如果加上Days的结果大于month中的Days -取下个月的第一天(第二天,第三天或其他)?!有什么方法或快速的解决方案吗?

谢谢你的帮助。

欢呼戴夫

如何在一个月内添加天数

如果您使用AddDays()方法,它将在发生溢出时自动为您处理月份和年份的变化…

eskalation = eskalation.AddDays(numOfDays);

考虑到这一点,我相信下面的代码可以满足您的需要:
// Keep looping until we find a date that we like
while(true)
{
    if(holidays.Contains(eskalation.Value.Date))
        eskalation = eskalation.AddDays(1);
    else if(eskalation.Value.DayOfWeek == DayOfWeek.Saturday)
        eskalation = eskalation.AddDays(2);
    else if(eskalation.Value.DayOfWeek == DayOfWeek.Sunday)
        eskalation = eskalation.AddDays(1);
    else
        break;
}

注意:你可以用括号来整理代码,如果你愿意的话,还可以改进逻辑。我只是想保持简短,以便更容易理解发生了什么

使用AddDays:

eskalation = eskalation.AddDays(1);

它将处理某些月份比其他月份更长的情况。它也比你现在做的更干净/更容易。

为什么不简单点呢

// isFreeDay can check for weekends, holidays, ...
while (isFreeDay(eskalation.Value.Date)) 
{
    eskalation = eskalation.Value.AddDays(1);
}

不这样做:

if (eskalation.Value.DayOfWeek == DayOfWeek.Saturday)
{
    eskalation = new DateTime(eskalation.Value.Year, eskalation.Value.Month, eskalation.Value.Day + 2, 8, 0, 0);
}

就这样做:

while (eskalation.Value.DayOfWeek == DayOfWeek.Saturday || eskalation.Value.DayOfWeek == DayOfWeek.Sunday)
{
    eskalation = eskalation.AddDays(1) ; 
}