我在英国服务器上安装了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?
有关信息:
编辑:
关于上下文的一些额外细节.有问题的程序集是通过COM interop从作为COM +应用程序运行的本机C++第三方组件调用的.
服务器配置不正确.控制面板+区域和语言,位置选项卡.改变这可能有点棘手.服务器可能故意错误配置.在做任何事情之前,先与服务器管理员联系.
您的后备计划是使用带有IFormatProvider参数的DateTime.TryParse()方法重载.传递CultureInfo.GetCultureInfo("en-gb").DateTimeFormat.
您不必更改 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)
| 归档时间: |
|
| 查看次数: |
27342 次 |
| 最近记录: |