计算两个日期之间的天数和小时数,并考虑周末(仅工作日)
本文关键字:周末 工作日 小时 两个 日期 之间 计算 | 更新日期: 2023-09-27 18:19:09
我想这样做:
var startDate = DateTime.Now
var durationDays = 2
var expectedEndDate = startDate.AddDays(durationDays)
但如果在这些天之间有周末,则将它们贴现为天。因此,如果预期的结束日期是星期六,那么结束日期需要在接下来的星期一。
根据您想要添加的天数作为最大值,您可以在while循环中检查该天,并通过AddDays
添加另一天,只要expectedEndDate
所在周的当前一天是周末。也许像这样:
DateTime startDate = DateTime.Now
int durationDays = 2
DateTime expectedEndDate = startDate.AddDays(durationDays)
while( expectedEndDate.DayOfWeek == DayOfWeek.Saturday ||
expectedEndDate.DayOfWeek == DayOfWeek.Sunday )
{
expectedEndDate.AddDays( 1 );
}
如果您需要一个更灵活的解决方案来处理多个周末的较大日期差异,那么另一篇文章的链接解决方案适合您(我试图保持简单:-))。
您也可以使用这种解决方案,如果您要检入更大的时间跨度,它应该更有效:计算两个日期之间的工作日数?
试试这个:
var startDate = DateTime.Now;
var durationDays = 2;
var expectedEndDate = startDate.AddDays(durationDays);
if (expectedEndDate.DayOfWeek == DayOfWeek.Saturday)
{
expectedEndDate = expectedEndDate.AddDays(2);
}
else
{
if (expectedEndDate.DayOfWeek == DayOfWeek.Sunday)
{
expectedEndDate = expectedEndDate.AddDays(1);
}
}
我试着改进@Gorgsenegger的答案:
int iteration = 0;
while (iteration < durationDays)
{
while (expectedEndDate.DayOfWeek != DayOfWeek.Saturday && expectedEndDate.DayOfWeek != DayOfWeek.Sunday)
{
expectedEndDate = expectedEndDate.AddDays(1);
iteration++;
if (iteration == durationDays) break;
}
if (iteration == durationDays) break;
if (expectedEndDate.DayOfWeek == DayOfWeek.Saturday) expectedEndDate=expectedEndDate.AddDays(2);
if (expectedEndDate.DayOfWeek == DayOfWeek.Sunday) expectedEndDate=expectedEndDate.AddDays(1);
}
if (expectedEndDate.DayOfWeek == DayOfWeek.Saturday)expectedEndDate= expectedEndDate.AddDays(2);
if (expectedEndDate.DayOfWeek == DayOfWeek.Sunday) expectedEndDate=expectedEndDate.AddDays(1);
我认为这段代码可以处理所有情况