我正在尝试解析一个包含毫秒的字符串,如下所示:
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吗?
答案 0 :(得分:4)
DateTimeFormatInfo适用于格式化/解析日期,而不适用于NumberFormatInfo。 DateTimeFormatInfo没有定义可以被不同文化重载的“秒/毫秒”分隔符。
除了往返之外,Standard Date and Time format strings都没有显示毫秒,但往返似乎不是文化敏感的。所以你不应该以这种格式发生字符串,除非你自己的代码正在生成它。如果您知道您的代码将以该格式生成日期,则可以提供一个自定义格式字符串,该字符串使用逗号作为秒和毫秒之间的分隔符。