3

Well i am trying to parse that date

5/10/2013 002704

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

but i get this Exception

String was not recognized as a valid DateTime.

However!, this code works to parse only the time *without date*

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

Well i hope someone helps me with that problem and thanks in advance...

HINT : THIS ALSO FAILS

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

Well it works! thanks to every one helped me here for his\her very nice help that i really appreciate very much. Also i will take the XY Problem into account next time :D.

4

4 回答 4

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);
于 2013-05-09T23:36:38.080 回答
3

你有两件事不对:

  1. 您正在使用dd月份中的某天,0如果日期为一位数,则需要前导。改为使用d
  2. 正如其他人所说,您正在使用-您的格式,但/在您的输入数据中。
于 2013-05-09T23:37:06.240 回答
2

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

你们都可以吃蛋糕也可以吃!

它们都是有效的,因此将它们都视为有效。为自己构建一个允许格式的数组并将其传递给 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 ...
        }
于 2013-05-10T02:33:26.730 回答
2

首先,您正在解析包含-(dd-MM-yyyy) 而字符串包含/(5/10/2013) 的格式字符串。

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

  var stt = "5/10/2013 002704";
    result = DateTime.ParseExact(stt, "d/MM/yyyy HHmmss", CultureInfo.InvariantCulture);
于 2013-05-09T23:34:48.417 回答