DateTime ParseExact引发异常

时间:2013-05-09 23:30:08

标签: c# datetime

我正在尝试解析该日期

  

5/10/2013 002704

        var stt = "5/10/2013 002704";
        result = DateTime.ParseExact(stt, "dd-MM-yyyy HHmmss", CultureInfo.InvariantCulture);

但我得到了例外

  

字符串未被识别为有效的DateTime。

然而!此代码仅用于解析时间*without date*

        var stt = "002704";
        result = DateTime.ParseExact(stt, "HHmmss", CultureInfo.InvariantCulture);

我希望有人能帮助我解决这个问题并提前感谢...

提示:这也是失败

    var stt = "5/10/2013 002704";
    result = DateTime.ParseExact(stt, "dd/MM/yyyy HHmmss", CultureInfo.InvariantCulture);

嗯它有效!感谢每一个人帮助我,为他的\非常好的帮助,我非常感谢。此外,我将在下次考虑XY问题:D。

4 个答案:

答案 0 :(得分:5)

啊,你正在使用dd进行解析,但传入d。将输入字符串更改为"05/10/2013 002704",并确保在分隔符中使用/

var stt = "05/10/2013 002704";
result = DateTime.ParseExact(stt, "dd/MM/yyyy HHmmss", CultureInfo.InvariantCulture);

修改

抱歉,我不得不接听电话,无法完成我的想法。您可能不需要使用dd d。它适用于05/10/2013或任何数字(最多31个)(如问题评论中所述)。另外,我认为@DanJ对此方法的用例做了很好的评论。

  

简短的回答是,如果您要使用Parse * Exact *(),您最好确保您提供的字符串与格式说明符匹配。

如果您要继续使用ParseExact,那么您应该使用:

result = DateTime.ParseExact(stt, "d/MM/yyyy HHmmss", CultureInfo.InvariantCulture);

答案 1 :(得分:3)

你有两件事是错的:

  1. 您正在使用dd作为该月的某一天,如果该日是一位数,则需要前导0。请改用d
  2. 正如其他人所说,您使用的格式为-,但输入数据为/

答案 2 :(得分:2)

首先,您使用包含-(dd-MM-yyyy)的格式字符串进行语法分析,而字符串包含/(2013年5月10日)。

另一件事是,日组件应该是d,而不是dd,因为它是5而不是05

  var stt = "5/10/2013 002704";
    result = DateTime.ParseExact(stt, "d/MM/yyyy HHmmss", CultureInfo.InvariantCulture);

答案 3 :(得分:2)

为什么所有人都争论它应该是“d”与“dd”,还是“M”与“MM”?

你们都可以吃蛋糕而且也吃它!

它们都是有效的,所以将它们视为有效。为自己构建一个允许格式的 ARRAY ,并将其传递给DateTime.TryParseExact()。现在所有这些案件都会像你期望的那样处理:

        DateTime result;
        var stt = "5/10/2013 002704";
        string[] formats = { "d/M/yyyy HHmmss", "dd/MM/yyyy HHmmss", "d/MM/yyyy HHmmss", "dd/M/yyyy HHmmss" };
        if (DateTime.TryParseExact(stt, formats, null, System.Globalization.DateTimeStyles.None, out result))
        {
            // ... do something with "result" in here ...
            Console.WriteLine(result.ToString());
        }
        else
        {
            // ... parse failed ...
        }