繁体   English   中英

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

[英]Where is the system locale/culture set for .Net

我有一个安装在英国服务器上的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); 

我的代码工作正常。

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

有关信息:

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

编辑:

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

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

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

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

<globalization uiCulture="en" culture="en-GB" />

嗯,根据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表示的,所以如果没有别的可能你可以将它复制到线程的当前文化中。 我很惊讶您发现线程文化与已安装的文化不同的情况。 也许您的代码在改变文化的过程中运行?

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

您无需更改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”形式,而是基于CurrentCulture短日期格式,那么您应该使用

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM