代码之家  ›  专栏  ›  技术社区  ›  Carles Company

日期时间.TryParseExact未按预期工作

c#
  •  2
  • Carles Company  · 技术社区  · 14 年前

    为什么这样不行?

    DateTime.TryParseExact(text, "H", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value);
    

    另一方面,这是可行的:

    DateTime.TryParseExact(text, "HH", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value)
    

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  6
  •   AHM    14 年前

    好的,我必须查一下这个-它似乎应该可以工作,但它没有,因为自定义格式字符串无效。自定义格式字符串至少需要两个字符宽-请参阅:

    http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx#UsingSingleSpecifiers

    因此,根据文档,您可以使用以下代码修复此问题:

    DateTime.TryParseExact(text, "%H", CultureInfo.InvariantCulture, DateTimeStyles.AllowWhiteSpaces, out value);
    
        2
  •  0
  •   Øyvind Bråthen    14 年前

    我想这意味着 TryParseExact 无法将小时部分放入单个字符中,这对我来说是可以理解的,因为小时是12小时还是24小时。

        3
  •  0
  •   Bob G    14 年前

    如果没有更具体的信息,在给定输入的情况下,您正在构建的DatTime无法确定AM/PM。H只允许值为1-12,这就留下了歧义。HH提供了额外的信息。

        4
  •  0
  •   Richard    14 年前

    DateTime.TryParseExact

    例如,通过格式为“H”的“15:20”将失败,因为字符串中还有其他内容。

    或者分析整个字符串并使用 DateTime.Hour 获取小时,或者创建一个仅包含小时部分的字符串并使用 Int32.Parse .