C# 如何在一个月内增加天数?

C# 如何在一个月内增加天数?,c#,datetime,C#,Datetime,我对我的代码很满意,但还有一个问题 我有以下代码(短版本): 在这段代码中,我询问这一天是假日(列表),还是周六或周日,以及这是一个月的最后一天,因此我必须更改月份。 一切正常,但- 如果我有一个月的28号,有30天,这是一个假期,我会加上1天,所以我有29天。现在29日是星期六,所以我会再加上2天,但在这一点上我得到了我的例外,因为我加上这样的日子: if (eskalation.Value.DayOfWeek == DayOfWeek.Saturday) { eskalation =

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

我有以下代码(短版本):

在这段代码中,我询问这一天是假日(列表),还是周六或周日,以及这是一个月的最后一天,因此我必须更改月份。 一切正常,但-

如果我有一个月的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);
}
因此,结果将是一个月的第31天,只有30天

如何在一个月内增加天数?比如——如果加天数的结果大于当月的天数——取下个月的第一个(第二个、第三个或其他什么)?!有没有一种方法或快速解决方案

谢谢你的帮助

为Dave干杯

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

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;
}
注意:您可以用括号整理代码,并根据需要改进逻辑。我只是想把它写得简短一些,以便更容易理解正在发生的事情。如果您使用这种方法,它将在发生溢出时自动为您处理月份和年份的变化

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;
}
注意:您可以用括号整理代码,并根据需要改进逻辑。我只是想把它写得简短一些,以便更容易理解正在发生的事情

使用:

它将处理某些月份比其他月份长的情况。它也比您当前正在做的工作更干净/更容易。

使用:

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

为什么不简单一点呢

// isFreeDay can check for weekends, holidays, ...
while (isFreeDay(eskalation.Value.Date)) 
{
    eskalation = eskalation.Value.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) ; 
}

而不是这样做:

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) ; 
}

你不能做
eskalation=eskalation.AddDays(1)?您到底想要实现什么?请提供更多关于您为什么这样做的信息?这是一个报告应用程序-我必须计算已发送票据的升级日期。升级日期从来不是假日或周末,因此我必须从DB获取日期,然后计算它是否不是假日或周末。如果是假日或周末,我必须在下一个“工作日”(周一至周五)之前添加天数好的-现在我知道我为什么选择新的日期时间了-因为我也要设置时间。这不仅仅是
AddDays
——新的一天应该从早上8点开始,你不能
eskalation=eskalation.AddDays(1)?您到底想要实现什么?请提供更多关于您为什么这样做的信息?这是一个报告应用程序-我必须计算已发送票据的升级日期。升级日期从来不是假日或周末,因此我必须从DB获取日期,然后计算它是否不是假日或周末。如果是假日或周末,我必须在下一个“工作日”(周一至周五)之前添加天数好的-现在我知道我为什么选择新的日期时间了-因为我也要设置时间。这不仅仅是
AddDays
-新的一天应该从早上8点开始-现在我知道为什么我选择了
newdatetime
-因为我也必须设置时间。不仅仅是
AddDays
——新的一天也应该从早上8点开始。@DaveS:那就从一开始就把时间设定为一个时间,然后在循环在返回之前!一切都很好,工作非常出色!谢谢你的支持。好了,现在我知道为什么我要使用新的日期时间了,因为我也要设置时间。不仅仅是
AddDays
——新的一天也应该从早上8点开始。@DaveS:那就从一开始就把时间设定为一个时间,然后在循环在返回之前!一切都很好,工作非常出色!谢谢你的支持。