4 Stimmen

Standardkalender des CultureAndRegionInfoBuilders ändern

Ich möchte den Standardkalender der "th-TH"-Kultur von thailändisch-buddhistisch auf gregorianisch ändern und ihn als benutzerdefinierte Kultur registrieren.

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

Das obige Segment ändert den Standardkalender nicht.

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

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

cultureAndRegionInfoBuilder.Register();

Auch das funktioniert nicht.

Bitte um Hilfe. Vielen Dank

2voto

Paweł Dyda Punkte 18030

Ich glaube nicht, dass man das auf diese Weise machen kann. Eigentlich wäre es der einfachere Weg, den Standardkalender zu überschreiben:

        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));

Das funktioniert bei meiner Konsolenanwendung. Das einzige Problem ist, dass es bei Ihnen wahrscheinlich nicht funktionieren wird. Und warum? Ich denke, dass das von Ihnen erwähnte "SSRS Server Side Reporting" als ein anderer Prozess ausgeführt wird, und ich könnte mich irren, aber ich bin mir ziemlich sicher, dass Sie die CultureInfo-Einstellung nur für Ihren aktuellen Prozess überschreiben können. Ich glaube nicht, dass dies global geschehen kann (und sollte).

Auch, ich weiß nicht, Einzelheiten der Berichterstattung Lösung, die Sie verwenden, so dass es keine Hilfe sein könnte, aber könnten Sie nicht einfach bereits formatierte Datum-Zeit-Zeichenfolgen als Parameter übergeben? Das wäre z.B. in Crystal Reports der richtige Weg, um das Problem zu lösen. Im schlimmsten Fall müssten Sie die formatierten Zeichenfolgen in die Datenbank schreiben.

1voto

Eric MSFT Punkte 3196

Da Sie eine bestehende Kultur ändern (ersetzen), können Sie keine Kalender entfernen, aber Sie können sie neu anordnen:

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

Da es sich um eine Ersatzkultur handelt, werden Sie die Auswirkungen erst sehen, wenn Sie einen neuen Prozess starten.

0voto

Josh Wolf Punkte 203

Sie können eine bestehende Kultur nicht ändern, ohne sie vorher zu entfernen:

CultureAndRegionInfoBuilder.UnRegister("th-TH");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X