2

Je souhaite changer le calendrier par défaut de la culture 'th-TH' de ThaiBuddhist à Grégorien et l'enregistrer comme une culture personnalisée.Modifier le calendrier par défaut de CultureAndRegionInfoBuilder

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

Le segment ci-dessus ne modifie pas le calendrier par défaut.

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

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

cultureAndRegionInfoBuilder.Register(); 

Cela ne fonctionne pas non plus.

Aidez-nous s'il vous plaît. Thanx

+0

Désolé si vous trouvez cette question offensante, mais pourriez-vous nous expliquer pourquoi vous voulez faire cela? –

+0

@ Paweł Dyda Nous utilisons le reporting côté serveur SSRS et les dates de nos clients ont besoin au format calendrier grégorien tant que devise dans 'Bhat'. Le calendrier par défaut pour 'th-TH' est le bouddhiste thaïlandais. – Eranga

Répondre

0

Vous ne pouvez pas changer une culture existante sans l'enlever d'abord:

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

Avait déjà un bloc de catch pour attraper 'InvalidOperationException' et désinscrire la culture et enregistrer à nouveau. N'a pas fonctionné. – Eranga

1

Je ne pense pas que vous pouvez le faire de cette façon. En fait, il y aurait le moyen le plus facile de remplacer le calendrier par défaut:

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

Cela fonctionne pour mon application console. Le seul problème, ça ne marchera probablement pas pour vous. Pourquoi? Je pense que "SSRS Server Side Reporting" que vous avez mentionné fonctionne comme un processus différent et je peux me tromper, mais je suis sûr que vous pouvez remplacer le paramètre CultureInfo uniquement pour votre processus actuel. Je ne pense pas qu'il pourrait (et devrait) être fait globalement.

En outre, je ne connais pas les détails de la solution de création de rapports que vous utilisez, donc cela ne serait d'aucune aide, mais ne pourriez-vous pas simplement passer des chaînes de date-heure formatées comme paramètres? Ce serait le moyen de le résoudre dans Crystal Reports. Le pire scénario consisterait à écrire des chaînes formatées dans la base de données.

+0

Actuellement, en utilisant la méthode cultureAndRegionInfoBuilder.Register(), vous pouvez modifier le paramètre de cette culture dans la machine/le serveur. J'ai été en mesure de modifier le «symbole monétaire» en utilisant la méthode ci-dessus qui affectait SSRS fonctionnant sur ce serveur. Mais changer le calendrier ne fonctionne pas. Comme vous l'avez dit, si cela ne fonctionne pas, nous devons formater manuellement la date. Merci pour votre aide. – Eranga

0

Puisque vous modifiez une culture existante (de remplacement) vous ne pouvez pas supprimer des calendriers, mais vous pouvez les réordonner:

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

Comme il est une culture de remplacement, vous ne verrez pas l'effet jusqu'à ce que vous démarrez une nouveau processus.