系统区域设置/文化设置在哪里.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框架中的程序集是文化中立的。
你想用什么代码转换日期? 如果您使用的是 Parse
或TryParse
,请尝试为其提供culture参数以了解日期。