我想将“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();
这也不起作用。
请帮忙。感谢名单
答案 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();
由于它是替代文化,因此在您开始新流程之前不会看到效果。