C# 如何在一个月内增加天数?
我对我的代码很满意,但还有一个问题 我有以下代码(短版本): 在这段代码中,我询问这一天是假日(列表),还是周六或周日,以及这是一个月的最后一天,因此我必须更改月份。 一切正常,但- 如果我有一个月的28号,有30天,这是一个假期,我会加上1天,所以我有29天。现在29日是星期六,所以我会再加上2天,但在这一点上我得到了我的例外,因为我加上这样的日子:C# 如何在一个月内增加天数?,c#,datetime,C#,Datetime,我对我的代码很满意,但还有一个问题 我有以下代码(短版本): 在这段代码中,我询问这一天是假日(列表),还是周六或周日,以及这是一个月的最后一天,因此我必须更改月份。 一切正常,但- 如果我有一个月的28号,有30天,这是一个假期,我会加上1天,所以我有29天。现在29日是星期六,所以我会再加上2天,但在这一点上我得到了我的例外,因为我加上这样的日子: if (eskalation.Value.DayOfWeek == DayOfWeek.Saturday) { eskalation =
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:那就从一开始就把时间设定为一个时间,然后在循环在返回之前!一切都很好,工作非常出色!谢谢你的支持。