Я столкнулся с проблемой, связанной с датой и временем, моей программе необходимо изменить, является ли введенная пользователем строка даты действительной.
Программа предназначена для обработки диапазонов значений дат от 01.01.2000 ~ 31/12/2020, а формат строки похож на «12 февраля 10».
Проблема, с которой я сталкиваюсьиногда пользователь вводит значение типа «30 февраля 10» (это значение недопустимо), которое проходит проверку формата, но DateTime.TryParse будет интерпретировать эту строку как «10/02/1930 12:00:00 am».
Мое решение этой проблемы состоит в том, чтобы извлекать значение даты, месяца, года из строки отдельно и пытаться воссоздать строку даты.см. следующий код
private static void IsValidDateValue(string userInputValue, CustomValidatorExtended custValidator, string errorMessage, ref bool isValid)
{
Regex regexValue = new Regex(SHORT_DATE_VALUE);
if (regexValue.IsMatch(userInputValue))
{
Match match = regexValue.Match(userInputValue);
int dayValue;
if (!Int32.TryParse(match.Groups["date"].Value, out dayValue))
{
custValidator.ErrorMessage = errorMessage;
isValid = false;
return;
}
int monthValue;
if (!Int32.TryParse(ConvertMonthNameToNumber(match.Groups["month"].Value).ToString(), out monthValue))
{
custValidator.ErrorMessage = errorMessage;
isValid = false;
return;
}
//this application is designed to handle only from year 2000 ~ 2020 and user only suppose to enter 2 digits for year
int yearValue;
if (!Int32.TryParse("20" + match.Groups["year"].Value, out yearValue))
{
custValidator.ErrorMessage = errorMessage;
isValid = false;
return;
}
DateTime dtParse;
if (!DateTime.TryParse(yearValue + "-" + monthValue + "-" + dayValue, out dtParse))
{
custValidator.ErrorMessage = errorMessage;
isValid = false;
return;
}
}
else
{
isValid = true;
return;
}
}
Есть ли более простой способ использования метода по умолчанию .net framework для решения этой проблемы подстановки значений даты-года?
Спасибо и с уважением,