Проблема:
Имеются две рассматриваемые даты:
11-12-2018
11-13-2018
Взгляд на обадаты (и зная, что это даты), я могу сказать, что формат даты - «ММ-дд-гггг».
Как система узнает об этом?Что такое 11
?День или месяц?
Исходя из вашей культуры потоков, система использует (я полагаю) формат "dd-MM-yyyy".Благодаря этому ваш первый свидание правильно разбирается.Во вторую дату 13
не является допустимым значением для месяца;и, следовательно, ошибка.
Помимо ошибки, поймите, что ваши все даты анализируются неправильно , даже если они анализируются успешно.Дата и месяц меняются местами.
Решение:
Анализ строк в DateTime
должен выполняться с осторожностью.
Вы не отправляете информацию о формате вВаш DateTime.Parse
звонок.В этом случае он использует эту информацию из текущей культуры потоков.
Преобразует строковое представление даты и времени в эквивалент DateTime с использованием соглашений текущей культуры потоков.
Существует другая перегрузка того же метода, которая принимает IFormatProvider
в качестве параметра.Эту перегрузку следует использовать, чтобы конкретно указать формат входной даты.
Преобразует строковое представление даты и времени в его эквивалент DateTime, используя информацию о формате для конкретной культуры.
Лучшей альтернативой является использование DateTime.ParseExact
в этом случае.
DateTime dateTime = DateTime.ParseExact(inputStringDate, "MM-dd-yyyy", ...);