系统区域设置/文化设置在哪里.Net

and*_*ncx 9 .net c# locale

我在英国服务器上安装了ac#assembly(使用Visual Studio 2005编写的.net 2.0)时遇到问题,应该使用英国区域设置.

我的代码所做的是将dd/MM/yyyy格式的日期转换为utc.即yyyy-mm-dd.问题出现在16/02/2010等日期,组件无法转换日期并返回错误.调试后我意识到,由于一个奇怪的原因,System.CultureInfo返回的CultureInfo是en-US.

我可以使用以下方式编程更改这些设置:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB", false); 
Run Code Online (Sandbox Code Playgroud)

我的代码工作正常.

但是我不想一直这样做,因为我的系统应该是英国.不是我们.那么,如何将.Net框架的默认文化更改为默认en-GB而不是en-US?

有关信息:

  • 我试图更新machine.config文件并为全球化部分指定culture = en-GB(它被设置为中性)但它不起作用[已经为1.1和2.0做了]但是我可能没有改变了它.
  • 我已经验证了我的Windows区域设置,它们肯定是设置为英国,日期为dd/MM/yyyy
  • 我在虚拟服务器上运行并验证了我的主机系统.它也被设定为英国

编辑:

关于上下文的一些额外细节.有问题的程序集是通过COM interop从作为COM +应用程序运行的本机C++第三方组件调用的.

Han*_*ant 5

服务器配置不正确.控制面板+区域和语言,位置选项卡.改变这可能有点棘手.服务器可能故意错误配置.在做任何事情之前,先与服务器管理员联系.

您的后备计划是使用带有IFormatProvider参数的DateTime.TryParse()方法重载.传递CultureInfo.GetCultureInfo("en-gb").DateTimeFormat.


Nik*_*kis 1

您不必更改 CurrentCulture 来进行转换。如果您确定日期的格式为“dd/MM/yyyy”,您可以使用

DateTime dtTemp = DateTime.ParseExact(dateString, "dd/MM/yyyy", null) // in order not to have to specify a FormatProvider
Run Code Online (Sandbox Code Playgroud)

然后使用

dtTemp.ToString("yyyy-MM-dd")
Run Code Online (Sandbox Code Playgroud)

这样,无论 CurrentCulture 是什么,您都不会遇到问题。但是,如果您不确定日期的格式是“dd/MM/yyyy”,而是基于 CurrentCulture 短日期格式,那么您应该使用

DateTime dtTemp = DateTime(dateString, CurrentCulture.DateTimeFormat.ShortDatePattern, CurrentCulture.DateTimeFormat);
Run Code Online (Sandbox Code Playgroud)