更改CultureAndRegionInfoBuilder的默认日历

时间:2010-12-15 04:51:55

标签: .net internationalization calendar globalization cultureinfo

我想将“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();

这也不起作用。

请帮忙。感谢名单

3 个答案:

答案 0 :(得分:1)

我认为你不能这样做。实际上,有一种更简单的方法来覆盖默认日历:

        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中解决它的方法。最糟糕的情况是将格式化的字符串写入数据库。

答案 1 :(得分:0)

如果不首先删除现有文化,则无法更改现有文化:

CultureAndRegionInfoBuilder.UnRegister("th-TH");

答案 2 :(得分:0)

由于您要修改现有文化(替换),因此无法删除日历,但您可以对其进行重新排序:

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

由于它是替代文化,因此在您开始新流程之前不会看到效果。