我正在做这个测试应用程序,它要做的是从文本文件中查看一长串日期并获取缺失的日期(周末除外)并将结果写入输出文件。如果缺少的日期是一天,输出应该是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
优秀!谢谢所有
答案 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);