DateTime.ParseExact FormatException - PullRequest
2 голосов
/ 25 января 2012

Почему следующий код генерирует исключение FormatException?

DateTime.ParseExact("03/01/2012", "dd/MM/yyyy", null);

DateTime.ParseExact

Возможно, это связано с тем, что код выполняется в IIS 7.5 Express какчасть логики выполнения сайта MVC3?

Ответы [ 3 ]

4 голосов
/ 25 января 2012

Вам необходимо включить CultureInfo, например:

DateTime.ParseExact("03/01/2012", "dd/MM/yyyy", new CultureInfo("en-US"));

Косые черты в строке формата чувствительны к культуре, и если вы не передаете CultureInfo, используется текущая культура. Вы также можете использовать CultureInfo.InvariantCulture, и это будет работать. Джон Скит дает здесь несколько подробных объяснений.

3 голосов
/ 25 января 2012

зависит от вашей культуры, чтобы вывести это из уравнения ....

DateTime.ParseExact("03/01/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture);
2 голосов
/ 25 января 2012

Согласно документации , FormatException выбрасывается при одном из следующих условий:

public static DateTime ParseExact(
    string s,
    string format,
    IFormatProvider provider
) 
  • s или формат - пустая строка.
  • s не содержит даты и времени, соответствующих шаблону, указанному в формате.
  • Компонент часа и обозначение AM / PM в s не совпадают.

Если вы передадите ноль IFormatProvider, я думаю по умолчанию это культура текущего потока. Я бы посмотрел на это в Reflector. Есть ли какая-то причина, по которой вы хотели бы перейти в null?

UPDATE:

Я посмотрел на него в .NET Reflector, и по умолчанию он равен DateTimeFormatInfo текущего потока. Я не знаю, разрешено ли мне публиковать код здесь.

...