修改现有文化?

CultureInfo culture = new CultureInfo("en-US"); culture.DateTimeFormat.DateSeparator = "/"; culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; //dekadikoi arithmoi culture.NumberFormat.NumberDecimalSeparator = "."; Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; 

因为它需要在任何地方工作! 问题是做new CultureInfo("en-US"); 所有其他计算机特定的设置都被省略…有没有办法复制CurrentCulture? 我试图修改currentculture但我只读了错误…

 CultureInfo culture = (CultureInfo)CultureInfo.CurrentCulture.Clone(); culture.DateTimeFormat.DateSeparator = "/"; culture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; //dekadikoi arithmoi culture.NumberFormat.NumberDecimalSeparator = "."; Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture; 

您可能希望使用:

 CultureInfo culture = (CultureInfo)CultureInfo.CurrentUICulture.Clone(); 

代替。

只需更改一行:

 CultureInfo culture = CultureInfo.GetCultureInfo("en-US"); 

那怎么样: CultureInfo culture=CultureInfo.CurrentCulture;

只需获取CurrentCulture类的副本并根据需要对其进行修改即可。 如果确实需要更改线程本身的CultureInfo(而不是使用副本),则需要为代码提供安全权限并将ControlThread属性设置为true。 (见链接)

根据Jon Hanna的解决方案,我建议从特定的文化开始,因为CurrentCulture可以设置为任何东西。

 public static CultureInfo GetCustomCulture(string baseCulture = "en-ZA", char numberDecimalSeperator = '.', char listSeperator = ',') { var culture = CultureInfo.GetCultureInfo(baseCulture).Clone(); culture.NumberFormat.NumberDecimalSeparator = numberDecimalSeperator + ""; culture.TextInfo.ListSeparator = listSeperator + ""; return culture; } 

然后将此行添加到Program.cs的开头

 System.Globalization.CultureInfo.CurrentCulture = GetCustomCulture();