Сокращенные месячные имена не работают должным образом. NET Core 3.1 - PullRequest
0 голосов
/ 17 января 2020

У меня проблема с пользовательским DateTime в. NET Core 3.1. Насколько я могу судить, мой код должен действительно работать. Я не сделал ничего особенно сложного, но просто установил пользовательские названия месяцев.

Я хочу, чтобы культура Swedi sh и месяцы печатались без точка в конце.

using System;
using System.Globalization;

namespace Playground.DateTime
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var culture = new CultureInfo("sv-SE")
            {
                DateTimeFormat =
                {
                    AbbreviatedMonthNames = new [] { "jan", "feb",  "mar" ,"apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec", ""}
                }
            };

            var today = new System.DateTime(2020, 01, 16);

            Console.WriteLine($"Today date without culture set: {today.ToString("d MMM yyyy")}");

            CultureInfo.DefaultThreadCurrentCulture = culture;
            CultureInfo.DefaultThreadCurrentUICulture = culture;

            Console.WriteLine($"Today date WITH culture set: {today.ToString("d MMM yyyy")}");

            Console.ReadLine();
        }
    }
}

Вывод вышеуказанного кода:

Today date without culture set: 16 Jan 2020

Today date WITH culture set: 16 jan. 2020

Я ожидаю, что это будет (примечание без точка на втором выходе):

Today date without culture set: 16 Jan 2020

Today date WITH culture set: 16 jan 2020

Вот точка-точка для приведенного выше кода.

Есть идеи о том, что происходит? Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 января 2020

У нас была ошибка https://github.com/dotnet/corefx/issues/2804 в форматировании родительных названий (например, при использовании форматов d MMM). Мы исправили эту ошибку, чтобы правильно использовать родительные названия месяцев, а не только сокращенные названия месяцев.

Вы можете исправить свой код, добавив вторую строку во фрагменте:

AbbreviatedMonthNames = new [] { "jan", "feb",  "mar" ,"apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec", ""}

AbbreviatedMonthGenitiveNames = AbbreviatedMonthNames;

Для получения дополнительной информации вы можете обратиться к do c https://docs.microsoft.com/en-us/dotnet/api/system.globalization.datetimeformatinfo.abbreviatedmonthgenitivenames?view=netframework-4.8#System_Globalization_DateTimeFormatInfo_AbbreviatedMonthGenitiveNames

2 голосов
/ 17 января 2020

Что мне не хватало, так это установить другое свойство, а именно AbbreviatedMonthGenitiveNames. Вот рабочая до tnet скрипка . Если вам интересно, вы можете узнать больше здесь .

Не уверен, но я предполагаю, что это поведение отличается между NET Core 2.X и 3.X, поскольку у меня нет Я не сталкивался с этой проблемой раньше. Работал. NET Core 2.2 довольно долго и внезапно при обновлении до. NET Core 3.1 это выглядело как проблема.

ОБНОВЛЕНИЕ

Ранее в CoreCLR была ошибка (https://github.com/dotnet/corefx/issues/2804), которая была исправлена ​​в этом PR (https://github.com/dotnet/coreclr/pull/26384). Так что теперь вы должны установить AbbreviatedMonthGenitiveNames, как упомянуто Тареком.

...