我有一个应用程序运行在国际Windows XP安装的客户,客户端向我报告,一些客户端无法输入日期与他们的国家日期分隔符(。)。系统配置正确。我的应用从System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator
获取分隔符。 .net的版本是3.5SP1。
我观察到的另一个问题是在为另一位客户演示我的另一个应用程序时。应用程序在应用程序运行时更改了日期输出格式。而不是显示dd.mm.yyyy,在大约1.5小时的演示后,它改为us格式mm / dd / yyyy。因为它是在演示期间,我无法看出问题是什么。我只重新启动了应用程序,一切都很好。演示笔记本电脑上的操作系统是W7 en。在这里,我使用DateTime.ToShortDateString
。
我的问题是,是否,如果其他程序员在国际系统上遇到如此模糊的全球化问题,如果是的话,是否有一些做和不做。或者是否有一个我不知道的键盘快捷键,它会改变区域设置(而不是键盘布局,这是我所知道的)。
答案 0 :(得分:2)
永远不要依赖最终环境以及此类问题的安装配置。 100%确定正确的全球化(以及本地化)的最佳方法是将所有检查放在代码本身中。当我知道我的应用程序将在不同的语言环境中使用时,我通过代码显式获取/设置当前的文化信息。此外,几乎所有常见类型的解析方法(如数字,日期时间等)都有一个重载,允许您指定在解析特定于文化的数据时要使用的文化信息。你确定这个吗?
最后但并非最不重要,请确保您的数据库服务器与您的sps配置正确并编码为不同语言环境中的数据输入。例如,sql server有很多选项(包括ISO标准)用于日期时间解析/保存。 sql server 2008为您提供了更简单,更好的选择
另外,日期时间的黄金法则是始终以UTC格式保存它们,但会根据当前时区/区域设置格式显示它们。程序员犯的一个非常常见的错误是不在db中以UTC / GMT格式保存日期时间信息。例如:它们保存DateTime.Now而不是保存DateTime.UTCNow。我已经看到,当应用处理多种文化/语言环境/时区时,如果没有花费数周的时间来试图找出这样的错误/问题。在处理数字时也是如此。例如:电子商务网站上某个商品的价格,用于处理多个国家/地区和货币的销售情况
答案 1 :(得分:1)
以下答案包含有关如何使用CultureInfo类的有价值的指示: How to honor/inherit user's language settings in WinForm app?