Ответ с учетом того, что это происходит в MacOS
Немного покопавшись в исходном коде, кажется, что в Linux / MacOS .NET Core будет использовать ICU для форматирования даты и времени, и в вашем случае это приведет к двузначному году. Существует проблема , решенная с помощью запроса на извлечение для обеспечения согласованности форматирования года на разных платформах. Однако, насколько я вижу, это изменение планируется включить только в .NET Core 3.
Неправильный ответ, предполагая, что ОС Windows
Выполнение следующего кода
var sample = new DateTime(2050, 1, 1);
var datestr = sample.ToString("d", CultureInfo.GetCultureInfo("de"));
Console.WriteLine(datestr);
печать
01.01.2050
так что, похоже, проблема специфична для вас.
Однако, хотя вы указали, что ваша культура "de_DE", ваш код не использует культуру. Если в вызове ToString
не указана культура, используется CultureInfo.CurrentCulture
, поэтому я предполагаю, что вы настроили Windows для использования немецкого регионального формата.
Windows позволяет вам настроить региональный формат, и если вы это сделаете, .NET будет использовать ваш измененный формат при использовании CultureInfo.CurrentCulture
. Вы можете проверить и изменить формат в приложении «Настройки Windows»:
- Настройки (клавиша Windows + I)
- Время и язык
- Регион
- Изменить форматы данных
Вы можете найти это удивительным, и есть еще более удивительный факт о культуре, возвращенной CultureInfo.CreateSpecificCulture
, о которой вы можете прочитать в моем ответе на вопрос Когда использовать CultureInfo.GetCultureInfo (String) или CultureInfo. CreateSpecificCulture (String) .
Чтобы избежать этой функции (или причуды) CultureInfo.CurrentCulture
, вы можете явно указать CultureInfo
при форматировании даты. Однако, если эта дата отображается для пользователя, то, вероятно, лучше просто использовать CultureInfo.CurrentCulture
, чтобы позволить пользователю свободно настраивать формат.