2

Ich möchte den Standardkalender der 'th-TH'-Kultur von ThaiBuddhist in Gregorian ändern und ihn als benutzerdefinierte Kultur registrieren.Ändern des Standardkalenders von CultureAndRegionInfoBuilder

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

Oben Segment ändert nicht den Standardkalender.

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

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

cultureAndRegionInfoBuilder.Register(); 

Dies funktioniert auch nicht.

Bitte helfen. Thanx

+0

Es tut uns leid, wenn Sie diese Frage offensiv finden, aber könnten Sie ein wenig Licht darauf werfen, warum Sie das tun wollen? –

+0

@ Paweł Dyda Wir verwenden SSRS-Server-Side-Reporting und unser Client benötigt Daten im Gregorianischen Kalenderformat, während Währung in "Bhat". Der Standardkalender für 'th-TH' ist Thai Buddhist. – Eranga

Antwort

0

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

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

hatte bereits einen catch-Block, um 'InvalidOperationException' abzufangen, die Registrierung der Kultur aufzuheben und sich erneut zu registrieren. Hat nicht funktioniert. – Eranga

1

Ich glaube nicht, dass Sie es auf diese Weise tun können. Eigentlich gäbe es den einfacheren 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 für meine Konsolenanwendung. Das einzige Problem, es wird wahrscheinlich nicht für Sie arbeiten. Warum? Ich denke, dass "SSRS Server Side Reporting", das Sie erwähnt haben, als ein anderer Prozess ausgeführt wird und ich möglicherweise falsch liege, aber ich bin mir ziemlich sicher, dass Sie die CultureInfo-Einstellung nur für Ihren aktuellen Prozess überschreiben können. Ich glaube nicht, dass es global getan werden könnte (und sollte).

Ich weiß auch nicht, welche Details der Berichtslösung Sie verwenden, also könnte es keine Hilfe sein, aber konnten Sie nicht schon formatierte Datum-Zeit-Zeichenfolgen als Parameter übergeben? Das wäre der Weg, um es zu lösen, zum Beispiel in Crystal Reports. Das Worst-Case-Szenario wäre das Schreiben formatierter Strings in die Datenbank.

+0

Wenn Sie die Methode cultureAndRegionInfoBuilder.Register() verwenden, können Sie die Einstellung dieser Kultur auf dem Computer/Server ändern. Ich war in der Lage, das Währungssymbol mit der obigen Methode zu ändern, die SSRS auf diesem Server betroffen hat. Aber das Ändern des Kalenders funktioniert nicht. Wie Sie gesagt haben, wenn das nicht funktioniert, müssen wir das Datum manuell formatieren. Danke für Ihre Hilfe. – Eranga

0

Da Sie eine bestehende Kultur modifizieren (Ersatz) Sie können keine Kalender entfernen, aber Sie können sie neu ordnen:

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

Da es sich um eine Ersatzkultur ist, werden Sie nicht den Effekt sehen, bis Sie ein Start neuer Prozess.

Verwandte Themen