对于某些文化,解析包含毫秒的DateTime会失败。为什么?

时间:2010-05-11 13:48:07

标签: c# parsing datetime cultureinfo

我正在尝试解析一个包含毫秒的字符串,如下所示:

string s = "11.05.2010 15:03:08.7718687"; // culture: de-CH
DateTime d = DateTime.Parse(s); // works

但是,例如在de-DE语言环境下,小数点分隔符是逗号(不是点)。所以这个例子就变成了:

string s = "11.05.2010 15:03:08,7718687"; // culture: de-DE (note the comma)
DateTime d = DateTime.Parse(s); // throws a FormatException

我觉得DateTime.Parse(s)应该抛出一个FormatException,因为它应该使用CultureInfo.CurrentCulture进行解析,这很奇怪。即使将CurrentCulture明确地作为参数传递也无济于事。有没有人知道为什么这不起作用?不解析会考虑NumberFormatInfo.NumberDecimalSeparator吗?

1 个答案:

答案 0 :(得分:4)

DateTimeFormatInfo适用于格式化/解析日期,而不适用于NumberFormatInfo。 DateTimeFormatInfo没有定义可以被不同文化重载的“秒/毫秒”分隔符。

除了往返之外,Standard Date and Time format strings都没有显示毫秒,但往返似乎不是文化敏感的。所以你不应该以这种格式发生字符串,除非你自己的代码正在生成它。如果您知道您的代码将以该格式生成日期,则可以提供一个自定义格式字符串,该字符串使用逗号作为秒和毫秒之间的分隔符。