如何从范围中获取缺失的日期

时间:2011-09-06 07:59:51

标签: c# date

我正在做这个测试应用程序,它要做的是从文本文件中查看一长串日期并获取缺失的日期(周末除外)并将结果写入输出文件。如果缺少的日期是一天,输出应该是ccyy / mm / dd,如果它超过一天它应该是ccyy / mm / dd - ccyy / mm / dd,所以这就是我想出来的它似乎不能正常工作,我想我没有正确地进行测试。

List<string> missigDateStrings = new List<string>();
for (int i = 0; i < dateList.Count; i++ )
{
    DateTime firstDate = dateList[i];
    DateTime secondDate = dateList[i + 1];

    if (firstDate.DayOfWeek != DayOfWeek.Saturday && 
        firstDate.DayOfWeek != DayOfWeek.Sunday)
    {
        if (secondDate.DayOfWeek != DayOfWeek.Saturday && 
            secondDate.DayOfWeek != DayOfWeek.Sunday)
        {
            if (firstDate.AddDays(1) != secondDate)
            {
                string sFirstMissingDate = firstDate.ToShortDateString();
                DateTime testDate = firstDate;
                while (testDate != secondDate)
                        {
                            testDate.AddDays(1);
                            if (testDate == secondDate)
                            {
                                string sLastMissingDate = firstDate.AddDays(1).ToShortDateString();
                                string range = String.Format("{0}-{1}", sFirstMissingDate, sLastMissingDate);
                                missigDateStrings.Add(range);
                            }

                        }
                }
            }
        }
    }
}

任何帮助都将不胜感激。

P.S。所有日期都已转换为DateTime

优秀!谢谢所有

2 个答案:

答案 0 :(得分:1)

如果差距超过7天,您也可以获得周末日。我认为这是你的问题。所以你应该在

中添加另一张Sat / Sun支票
while (testDate != secondDate)

并在周五打破循环,跳过周末并再次在周一开始循环。

编辑:

在你的情况下,下面总是假的。这就是为什么你没有得到任何输出。

if (firstDate == secondDate)

答案 1 :(得分:1)

更改

 testDate.AddDays(1);

 testDate = testDate.AddDays(1);

DateTime是一个不可变的值类型,AddDays()返回 new 实例,但不会(不能)更改原始值。

只是为了好玩,回答标题问题,

var missing = Enumerable.Range(0, 10)
          .Select(i => baseDate.AddDays(i))
          .Except(datesFromFile);