Как я могу принять как двузначные, так и четырехзначные года с одним вызовом DateTime.ParseExact? - PullRequest
6 голосов
/ 30 марта 2012

Я звоню .NET DateTime.ParseExact со строкой нестандартного формата вдоль строк "MM/dd/yyyy h:mmt". Эта строка обрабатывает четырехзначные годы, но не двузначные. Есть ли способ обработать оба случая в одном вызове ParseExact? Я пробовал "MM/dd/yy h:mmt", и он обрабатывает только двузначный регистр.

Ответы [ 4 ]

19 голосов
/ 30 марта 2012

Вы можете передать массив строк формата для второго параметра при этой перегрузке ParseExact - это будет включать как 2-х, так и 4-х летний варианты.

3 голосов
/ 30 марта 2012

Вызовите перегрузку DateTime.ParseExact, которая принимает массив возможных форматов:

DateTime dt =
    DateTime.ParseExact(s, new[] { "MM/dd/yyyy h:mmt", "MM/dd/yy h:mmt" }, null, 0);

Для третьего аргумента передайте null или DateTimeFormatInfo.CurrentInfo, если строка даты локализована для текущего пользователякультура;передайте DateTimeFormatInfo.InvariantInfo, если ваша строка даты всегда в американском формате.

Четвертый аргумент: 0 эквивалентен DateTimeStyles.None.

См. документацию Библиотеки MSDN .

1 голос
/ 30 марта 2012

Используйте перегруженный DateTime.ParseExact , который принимает строковый массив форматов.

MSDN:

string[] formats= {"MM/dd/yyyy h:mmt", "MM/dd/yy h:mmt"};


var dateTime = DateTime.ParseExact(dateString, formats, 
                                        new CultureInfo("en-US"), 
                                        DateTimeStyles.None);
0 голосов
/ 30 марта 2012

Вы всегда можете просто использовать соответствующую перегрузку :

var date = DateTime.ParseExact(dateString,
                               new[] { "MM/dd/yyy h:mmt", "MM/dd/yy h:mmt" },
                               new CultureInfo("en-US"), 
                               DateTimeStyles.None);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...