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

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

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

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

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB", false); 

我的代码工作正常。

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

有关信息:

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

编辑:

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

您无需更改CurrentCulture即可进行转换。 如果您确定日期是“dd / MM / yyyy”,您可以使用

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

然后使用

 dtTemp.ToString("yyyy-MM-dd") 

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

 DateTime dtTemp = DateTime(dateString, CurrentCulture.DateTimeFormat.ShortDatePattern, CurrentCulture.DateTimeFormat); 

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

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

嗯,根据API文档 :

启动线程时,最初使用Windows API中的GetUserDefaultLCID确定其文化。

此方法从(顾名思义)用户的默认区域设置派生它的区域设置,我假设它位于控制面板中。 注意 :这与UI区域设置不同。

谢谢你的回答(安迪代表我发布了这个问题)。 这确实是区域设置的一个问题,但既不是我所连接的用户,也不是用户正在运行的用户。 那太简单了。 看起来默认用户仍然是en-US。 我通过单击高级选项卡中的“将设置应用于当前用户和默认用户…”复选框并重新启动服务器来重置。 System.Globalization.CultureInfo现在返回{en-GB}。 无论日期是以dd / MM / yyyy还是dd-MM-yyyy或yyyy-MM-dd传递而不需要解析,MyDate.ToString(yyyy-mm-dd)都能正常工作。

但是非常感谢你们的建议(ParseExact等)确实有效。 它们对我无法以一种很好的方式处理的其他日期格式非常有帮助(yyyyMMdd)。

我相信这是由System.Globalization.CultureInfo.InstalledUICulture表示的,所以如果没有别的可能你可以将它复制到线程的当前文化中。 我很惊讶你发现了一个线程文化与已安装的文化不同的情况。 也许您的代码在改变文化的过程中运行?

运行代码的帐户可能具有与系统默认值不同的区域设置。 你检查过了吗?

要为所有页面设置UI文化和文化,请将全球化部分添加到Web.config文件,然后设置uiculture和culture属性,如以下示例所示:

.net框架中的程序集是文化中立的。

你想用什么代码转换日期? 如果您使用的是ParseTryParse ,请尝试为其提供culture参数以了解日期。