Изменить календарь культуры по умолчаниюAndRegionInfoBuilder - PullRequest
2 голосов
/ 15 декабря 2010

Я хочу изменить календарь по умолчанию культуры 'th-TH' с ThaiBuddhist на Gregorian и зарегистрировать его в качестве пользовательской культуры.

CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder("th-TH", CultureAndRegionModifiers.Replacement);
cultureAndRegionInfoBuilder.AvailableCalendars = new Calendar[] { new GregorianCalendar()};
cultureAndRegionInfoBuilder.Register();

Выше сегмент не меняет календарь по умолчанию.

CultureInfo cultureInfo = new CultureInfo("th-TH");
cultureInfo.DateTimeFormat.Calendar = new GregorianCalendar();

CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder("th-TH", CultureAndRegionModifiers.Replacement);
cultureAndRegionInfoBuilder.LoadDataFromCultureInfo(cultureInfo);

cultureAndRegionInfoBuilder.Register();

Это тоже не работает.

Пожалуйста, помогите.Thanx

Ответы [ 3 ]

1 голос
/ 16 декабря 2010

Я не думаю, что вы можете сделать это таким образом. На самом деле, был бы более простой способ переопределить календарь по умолчанию:

        CultureInfo thaiCulture = CultureInfo.CreateSpecificCulture("th-TH");
        Console.Out.WriteLine(DateTime.Now.ToString(thaiCulture));
        DateTimeFormatInfo thaiDateTimeFormat = thaiCulture.DateTimeFormat;
        thaiDateTimeFormat.Calendar = new GregorianCalendar();
        Console.Out.WriteLine(DateTime.Now.ToString(thaiCulture));

Это работает для моего консольного приложения. Единственная проблема, это, вероятно, не будет работать для вас. Зачем? Я думаю, что «Серверная отчетность SSRS», которую вы упомянули, работает как другой процесс, и я могу ошибаться, но я почти уверен, что вы можете переопределить настройку CultureInfo только для текущего процесса. Я не думаю, что это можно (и нужно) сделать глобально.

Кроме того, я не знаю специфики используемого вами решения для создания отчетов, так что оно может оказаться бесполезным, но не могли бы вы просто передать уже отформатированные строки даты и времени в качестве параметров? Это был бы способ решить эту проблему, то есть Crystal Reports. В худшем случае будет записывать отформатированные строки в базу данных.

0 голосов
/ 23 декабря 2010

Поскольку вы изменяете существующую культуру (замену), вы не можете удалять календари, но вы можете изменить их порядок:

var carib = new CultureAndRegionInfoBuilder("th-TH",
                                            CultureAndRegionModifiers.Replacement);
carib.AvailableCalendars = new Calendar[] { new GregorianCalendar(),
                                            new ThaiBuddhistCalendar() };
carib.Register();

Поскольку это культура замены, вы не увидите эффекта, пока не начнетеновый процесс.

0 голосов
/ 15 декабря 2010

Вы не можете изменить существующую культуру, не удалив ее сначала:

CultureAndRegionInfoBuilder.UnRegister("th-TH");
...