我有一个在国际上安装了windows xp的客户运行的应用程序,该客户向我报告说,一些客户无法使用他们国家的日期分隔符(.)输入日期。系统配置正确。我的应用接受了System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator
中的分隔符。.net的版本是3.5SP1。
我观察到的另一个问题是在为另一个客户演示我的另一个应用程序时。应用程序在应用程序运行时更改了日期输出格式。在大约1.5小时的演示之后,它变成了美国格式mm/dd/yyyy,而不是显示dd.mm.yyyy。因为它是在演示期间,我看不到问题是什么。我只是重启了应用程序,一切又恢复正常了。演示笔记本电脑上的操作系统是W7 en。这里我使用的是DateTime.ToShortDateString
。
我的问题是,如果,如果其他程序员也在国际系统上遇到这样的全球化的模糊问题,如果是,是否有一些做和不做。或者可能有一个我不知道的键盘快捷键,可以改变区域设置(不是键盘布局,这是我知道的)。
发布于 2011-01-31 12:08:33
永远不要依赖最终环境以及安装配置来解决此类问题。要100%确保正确的全球化(以及本地化),最好的方法是将所有检查都放在代码本身。当我知道我的应用程序将在不同的地区使用时,我会通过代码显式地获取/设置当前的区域性信息。此外,几乎每个常见类型(如numbers、datetime等)的解析方法都有一个重载,允许您在解析特定于区域性的数据时指定要使用的区域性信息。你能保证这一点吗?
最后但并非最不重要的一点是,确保您的数据库服务器以及您的sps针对不同地区的数据输入进行了正确的配置和编码。例如,sql server有很多用于日期-时间解析/保存的选项(包括ISO标准)。sql server 2008为您提供了更简单、更好的选项来实现同样的目的。
此外,datetime的黄金法则是始终以UTC格式保存它们,但根据当前时区/区域设置格式显示它们。程序员经常犯的一个错误是没有将日期时间信息以UTC / GMT格式保存在数据库中。例如:他们保存DateTime.Now,而不是保存DateTime.UTCNow。当一个应用程序处理多个文化/地区/时区时,我已经花了几天,如果不是几周的话,试图找出这样的bug/问题。在处理数字时也是如此。例如:电子商务网站上商品的价格,该网站在多个国家和货币进行交易。
发布于 2011-01-31 12:21:43
下面的答案包含了关于如何使用CultureInfo类的有价值的提示:How to honor/inherit user's language settings in WinForm app?
https://stackoverflow.com/questions/4850499
复制相似问题