Это происходит потому, что спецификатор стандартного формата даты / времени d
использует DateTimeFormat.ShortDatePattern
для создания выходной строки. Только символ "/"
в шаблоне будет заменен на DateSeparator
.
. Если вы добавите в тестовое приложение следующее:
Console.WriteLine(koCulture.DateTimeFormat.ShortDatePattern);
Console.WriteLine(jpCulture.DateTimeFormat.ShortDatePattern);
, вы увидите следующий результат :
yyyy-MM-dd
MM/dd/yyyy
Японская строка содержит символ «/», который будет заменен на DateTimeFormat.DateSeparator
, так что это работает.
Однако корейская строка использует -
- не будет заменен!
Возможный обходной путь - изменить корейский формат короткой даты следующим образом:
koCulture.DateTimeFormat.ShortDatePattern = koCulture.DateTimeFormat.ShortDatePattern.Replace('-', '/');
(хотя мне это кажется немного странным ...)
Что касается почему корейский шаблон короткой даты настроен так, я понятия не имею. Это похоже на ошибку, но только Microsoft может ответить на это!
Похоже, что множество культур имеют «неправильные» ShortDatePattern
значения, где Microsoft вставила фактический символ разделителя даты, а не "/"
символ, как показано в следующем коде:
foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
var dtf = culture.DateTimeFormat;
if (dtf.DateSeparator != "/" && dtf.ShortDatePattern.Contains(dtf.DateSeparator))
Console.WriteLine(culture.EnglishName + " has incorrect short date pattern: " + dtf.ShortDatePattern);
}