我如何从一个范围得到缺失的日期
本文关键字:范围 日期 一个 | 更新日期: 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);