1

我试图获得接下来的五个工作日,但我被困住了。

我是这样开始的:

        List<DateTime> allWeekEndsInOneYear = new List<DateTime>();

        DateTime sDate = DateTime.Now;
        DateTime eDate = DateTime.Now.AddYears(1);

        TimeSpan diff = eDate - sDate;
        int days = diff.Days;
        for (var i = 0; i <= days; i++)
        {
            var testDate = sDate.AddDays(i);
            switch (testDate.DayOfWeek)
            {
                case DayOfWeek.Saturday:
                case DayOfWeek.Sunday:
                    allWeekEndsInOneYear.Add(testDate);
                    break;
            }
        }

        List<DateTime> daysToMark = new List<DateTime>();

        DateTime startDate = DateTime.Now;
        DateTime endDate = DateTime.Now.AddDays(5);

现在我需要用接下来的 5 天填写 daysToMark,不包括周数(allWeekEndsInOneYear 中的那些)。非常感谢任何帮助。

4

2 回答 2

3

您可以在 switch 的默认情况下添加其他日期(不是周末):

for (var i = 0; i <= days; i++)
{
    var testDate = sDate.AddDays(i);
    switch (testDate.DayOfWeek)
    {
        case DayOfWeek.Saturday:
        case DayOfWeek.Sunday:
            allWeekEndsInOneYear.Add(testDate);
            break;
        default:
            daysToMark.Add(testDate); // this is a workday
            break;
    } 
}

此外,您不需要计算天数和使用for循环。while(testDate <= eDate)将完成这项工作:

var testDate = DateTime.Now;

while (testDate <= eDate)
{
    switch (testDate.DayOfWeek)
    {
       case DayOfWeek.Saturday:
       case DayOfWeek.Sunday:
            allWeekEndsInOneYear.Add(testDate);
            break;
       default:
            daysToMark.Add(testDate); // this is a workday
            break;
    }

    testDate = testDate.AddDays(1);
}
于 2012-11-13T21:16:57.193 回答
2

这将为您提供接下来的五天,而不是周六或周日。

var nextFiveWeekDays = new List<DateTime>();
var testDate = DateTime.Now.Date;

while (nextFiveWeekDays.Count()<5)
{
  if (testDate.DayOfWeek != DayOfWeek.Saturday && 
           testDate.DayOfWeek != DayOfWeek.Sunday)
     nextFiveWeekDays.Add(testDate);

testDate = testDate.AddDays(1);
}
于 2012-11-13T21:25:14.727 回答