代码之家  ›  专栏  ›  技术社区  ›  Dejan Scott Dorman

对某些区域性分析包含毫秒的日期时间失败。为什么?

  •  6
  • Dejan Scott Dorman  · 技术社区  · 14 年前

    我试图分析一个包含毫秒的字符串,如下所示:

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

    但是,例如在de de-de-locale下,小数分隔符是逗号(不是点)。所以这个例子变成:

    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现在应该抛出一个formatException,因为它应该使用cultureInfo.currentCulture进行分析。即使将CurrentCulture作为参数显式传递也无济于事。有人知道为什么这样不行吗?解析不考虑numberFormatInfo.numberDecimalSeparator吗?

    1 回复  |  直到 14 年前
        1
  •  4
  •   Joshua Flanagan    14 年前

    日期时间格式信息适用于格式化/分析日期,而不是数字格式信息。DateTimeFormatInfo未定义可由不同区域性重载的“秒/毫秒”分隔符。

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