Строки даты / времени анализируются в соответствии с настройками культуры для текущего потока (что определяется региональными настройками, установленными на панели управления Windows).
Например, если текущая культура fr-FR или en-GB , тогда ввод ожидается в формате day/month/year
.Если текущая культура ru-US , ввод ожидается в формате month/day/year
.
Настройки культуры для текущей темы можно найти, посмотрев на тему .Свойство CultureInfo из Thread.CurrentThread .
Если вы не хотите анализировать строку даты / времени в соответствии с настройками культуры для текущего потока, вы должны указатьнастройки культуры в явном виде.
Ваш ввод, кажется, в формате en-US , в то время как ваша система настроена как fr-FR или en-GB .Поэтому явно укажите en-US в качестве культуры:
DateTime result = DateTime.Parse("07/21/2011", new CultureInfo("en-US"));
// result.Day == 21
// result.Month == 7
// result.Year == 2011
Причина, по которой ваш первый пример работает, заключается в том, что 1
является допустимым месяцем, в отличие от 21
.
DateTime result = DateTime.Parse("08/01/2011", new CultureInfo("fr-FR"));
// result.Day == 8
// result.Month == 1
// result.Year == 2011