我如何从一个范围得到缺失的日期

本文关键字:范围 日期 一个 | 更新日期: 2023-09-27 18:07:48

我正在做这个测试应用程序,它所要做的是通过文本文件中的一长串日期,并获得缺失的日期(不包括周末),并将结果写入输出文件。如果丢失的日期是一天,输出应该是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);
                            }
                        }
                }
            }
        }
    }
}

如有任何帮助,不胜感激。

注:所有日期已转换为DateTime

太棒了!谢谢大家

我如何从一个范围得到缺失的日期

如果间隔超过7天,你也有周末。我想那是你的问题。所以你应该在

中添加另一个星期六/星期日检查
while (testDate != secondDate)

并在星期五中断循环,跳过周末并在星期一再次开始循环。

编辑:

在你的例子中可能总是假的。这就是为什么你没有得到任何输出。

if (firstDate == secondDate)

变化

 testDate.AddDays(1);

 testDate = testDate.AddDays(1);

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

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

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