TryParseExact возвращает false, хотя я не знаю, почему

Метод TryParseExact в блоке кода ниже возвращает true.
Я хотел бы знать, почему. Я думаю, что эта дата "2013.03.12" неверна, потому что это не разделяется косой чертой, а точкой.

После того как я изменил значение CultureInfo "de-De" на "en-US", метод возвращает false. Это может быть намек, но я до сих пор не знаю, почему это происходит.

var format = new string[] { "yyyy/MM/dd" };
var parsed = new DateTime();
var result = DateTime.TryParseExact("2013.03.12", format, 
             new CultureInfo("de-DE"), DateTimeStyles.None, out parsed);

Ответ 1

Я думаю, что ваш текущий DateSeparator будет . (точка) и / автоматически заменить на него.

/ seperator имеет особое значение "замените меня текущим разделителем дат культуры"

CultureInfo c = new CultureInfo("de-DE");
Console.WriteLine(c.DateTimeFormat.DateSeparator); //Prints . (dot)

Взгляните на "/" Спецификатор специального формата

Ответ 2

Как указывает @Soner Gönül , / воспринимается как "разделитель даты" в строки пользовательского формата. Если вы хотите принимать только символы /, вам необходимо их избежать:

var format = new string[] { @"yyyy\/MM\/dd" };