c# – .NET进程如何获取文化信息?
我在
Windows Server 2003 R2上运行了一个Windows服务(C#,.NET 2.0).在一台服务器中,System.Threading.Thread.CurrentThread.CurrentCulture为{en-AU},另一台为{en-US}.
这在 DateTime对象上调用ToString()时会产生差异.我希望文化是{en-AU}. 我检查了“区域和语言设置”.在两个服务器中,“区域选项”选项卡显示“英语(Asutralia)”.但在“高级”标签中,其中一个显示“英语(美国)”,另一个显示“英语(澳大利亚)”.所以这必然会造成差异.虽然我想知道为什么“高级”选项卡上写着“你想要使用的非unicode程序的语言版本”,但我认为.NET进程是Unicode,不应受此影响. .NET运行时如何确定要使用的文化?任何详细的参考都会有所帮助. 解决方法
如果尚未在线程上设置文化,则Thread.CurrentThread.CurrentCulture默认为“用户默认文化” – 它从底层操作系统获取.这由区域控制面板小程序中的“格式”部分确定.
对于服务,它默认没有控制面板设置,例如用户(上述情况),因为它在没有配置文件的LocalSystem帐户下运行,因此它使用操作系统中的系统区域设置.我不确定是否可以通过调整Windows中的设置来为服务设置此项. 你可以做一些事情: >您可以在服务启动时显式设置主线程的CurrentCulture.如果这样做,您将需要记住,在您的服务中创建的任何新线程也需要设置其CurrentCulture,因为线程不会从父线程继承其文化. DateTime.ToString(new CultureInfo("en-AU")) 您可以将其添加为扩展方法,以节省您必须在任何地方执行此操作: public static string ToAUString(this DateTime dateTime) { return dateTime.ToString(new CultureInfo("en-AU")); } 然后,您可以调用DateTime.ToAUString()来获取正确的输出. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |