不同平台上的DateTime问题(.NET 2.0)

问题描述:

在具有Intel处理器的32位操作系统上,DateTime例如 。 2009年2月17日上午12点○○分00秒 注意,它是:毫米/ DD // YYYY不同平台上的DateTime问题(.NET 2.0)

在64位操作系统,与AMD处理器, 日期时间例如17-02-2009 00:00:00

现在,当我尝试解析第一种格式时,它会在第二个平台上引发错误。 这意味着 - DateTime.Parse(“2/17/2009 12:00:00 AM”) - 引发错误 - 无法转换。 而在同一平台上, DateTime.Parse(“17/2/2009 12:00:00 AM”)正常工作!这意味着DD/MM很好,MM/DD不是。

这是什么造成的? 64位操作系统?处理器?

我该如何摆脱这个问题?

DateTimes本身没有格式。您解析它们或将它们格式化为字符串。 (这就像数字 - 整数不是以十六进制或十进制存储的,它们只是整数,可以用十六进制或十进制格式化,但其值只是一个数字。)

格式将取决于操作系统的文化(或更确切地说,是线程的文化,通常与操作系统相同)。

就我个人而言,我喜欢明确地设置我用于解析或格式化的格式,除非我实际向用户显示字符串并知道该文化已经合适。

+0

我知道的FxCop警告你,当你做这样的事情处理字符串。它是否对DateTime执行相同的操作? – 2009-09-30 14:25:48

在“区域和语言”控制面板中检查“日期和时间格式”。另外,如果你想让DateTime生成一个特定的格式,不要只是调用普通的ToString(),而是传递一个参数来指示你想要的格式。同样,如果您知道要求解析的日期格式,请调用TryParseExact(),并将它提供的格式告诉它。

参见MSDN的Standard Date and Time Format Strings