如何在一个月内添加天数
本文关键字:添加 一个 | 更新日期: 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) ;
}