Как я могу получить недостающие даты из диапазона - PullRequest
2 голосов
/ 06 сентября 2011

Я делаю это тестовое приложение, и оно должно пройти длинный список дат из текстового файла и получить недостающие (исключая выходные дни) и записать результаты в выходной файл. Если пропущенная дата - один день, выходной результат должен быть 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 ]

1 голос
/ 06 сентября 2011

Изменить

 testDate.AddDays(1);

на

 testDate = testDate.AddDays(1);

DateTime - тип неизменяемого значения, AddDays() возвращает новый экземпляр, но не (не может)изменить исходное значение.

И просто для удовольствия, чтобы ответить на заглавный вопрос,

var missing = Enumerable.Range(0, 10)
          .Select(i => baseDate.AddDays(i))
          .Except(datesFromFile);  
1 голос
/ 06 сентября 2011

Если разрыв превышает 7 дней, вы также получаете выходные дни.Я полагаю, это ваша проблема.Поэтому вы должны добавить еще одну проверку для сб / вс в

while (testDate != secondDate)

и разорвать цикл в пятницу, пропустить выходные и снова запустить цикл в понедельник.

РЕДАКТИРОВАТЬ:

Ниже всегда ложно в вашем случае, вероятно.Вот почему вы не получаете никакого вывода.

if (firstDate == secondDate)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...