Требуется: DateTime.TryNew (год, месяц, день) или DateTime .IsValidDate (год, месяц, день)

Название в основном говорит само за себя. Я получаю три предоставленных пользователем целых числа ( год , месяц , день ) 1 из устаревшей базы данных (которую я не могу изменить ). В настоящее время я использую следующий код для синтаксического анализа этих целых чисел в структуру DateTime :

try {
    return new DateTime(year, month, day);
} catch (ArgumentException ex) {
    return DateTime.MinValue;
}

Иногда значения не представляют действительную дату (да, пользователи вводят такие вещи, как 1999-06-31 и нет, устаревшее приложение не проверяло это).Поскольку выдача исключения при неудачной проверке данных считается плохой практикой , я бы предпочел заменить это кодом без исключений. Однако единственным решением, которое я смог найти, было преобразование целых чисел в одну строку и TryParseExact эту строку, что мне кажется еще более уродливым. Я пропустил какое-нибудь очевидное лучшее решение?


1 На самом деле, это одно целое число в формате ГГГГММДД, но преобразовать его в год, месяц и день тривиально ...

10
задан Heinzi 27 February 2012 в 15:53
поделиться