DateTime. TryParse весь возможный тип дат

Я хочу проверить, имеет ли дата правильный формат. Существует много возможностей корректных дат как:

  • 08.02.2010
  • 08.02.2010
  • 08.02.2010 02.08
  • 02. Август
  • ...

Я могу протестировать каждого на с кодом как это:

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;
}

Я должен вручную добавить это времена или что я могу сделать?

7
задан Kev 29 January 2011 в 15:32
поделиться

2 ответа

Вы можете использовать что-то вроде следующего, но имейте в виду, что несколько форматов могут обрабатывать одну и ту же дату. Например, 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());
}
8
ответ дан 6 December 2019 в 11:48
поделиться

Да ParseExact может принимать список форматов для проверки.

var formats = new[] { "M.d.yyyy", "dd.MM.yyyy" };
var dateValue = DateTime.ParseExact(
    dateString, formats, new CultureInfo("sl-SI"), DateTimeStyles.None);
9
ответ дан 6 December 2019 в 11:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: