Я хочу проверить, имеет ли дата правильный формат. Существует много возможностей корректных дат как:
Я могу протестировать каждого на с кодом как это:
if (DateTime.TryParse(DateTime.ParseExact(date, "dd.M.",
new CultureInfo("sl-SI")).ToString(), out dt))
Но затем я могу иметь 40 если операторы. Действительно ли возможно проверить все даты с той если оператор или один цикл?
Обновление:
На основе ответов до сих пор, я тестирую этот код, но у меня есть еще одна проблема. Что, если я имею всего 9.2 не, не будут работать 02.09.2010 затем этих кода:
CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI");
string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns();
if (DateTime.TryParseExact(date, fmts, ci, DateTimeStyles.AssumeLocal, out dt))
{
DateTime = Convert.ToDateTime(date);
Check = true;
}
Я должен вручную добавить это времена или что я могу сделать?
Вы можете использовать что-то вроде следующего, но имейте в виду, что несколько форматов могут обрабатывать одну и ту же дату. Например, 10/11/12 можно проанализировать как yy / MM / dd или MM / dd / yy, которые являются допустимыми форматами даты в США. MM / dd / yy является более распространенным, поэтому он появляется первым в списке и является тем, который возвращается приведенным ниже кодом (если вы используете его с культурой США вместо культуры в примере).
string testValue = "10.11.12";
DateTime result;
CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI");
string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns();
Console.WriteLine(String.Join("\r\n", fmts));
if (DateTime.TryParseExact(testValue, fmts, ci,
DateTimeStyles.AssumeLocal, out result))
{
Console.WriteLine(result.ToLongDateString());
}
Да ParseExact может принимать список форматов для проверки.
var formats = new[] { "M.d.yyyy", "dd.MM.yyyy" };
var dateValue = DateTime.ParseExact(
dateString, formats, new CultureInfo("sl-SI"), DateTimeStyles.None);