为什么DateTime.TryParse是简单输入的接收错误?

时间:2016-09-30 08:21:36

标签: c# parsing datetime tryparse

为什么此代码收到输入错误,如" 8:16 AM":

        string time = Console.ReadLine();
        DateTime outValue = DateTime.MinValue;

        bool error = DateTime.TryParseExact(time, "HH:mmtt" /*"hh:mmtt"*/, CultureInfo.InvariantCulture, DateTimeStyles.None, out outValue);

        Console.WriteLine(error);
        Console.WriteLine(outValue);
        Console.Read();

我应该设置什么才能接受这样的输入" 8:16"并将其转换为DateTime对象?

3 个答案:

答案 0 :(得分:5)

您使用的HH需要2个小时的时间。您可以通过08:16AM或将HH更改为H

实例:http://rextester.com/IPNS3820

答案 1 :(得分:1)

由于期待两个小时的数小时而引起的。

如果缺少前导零,则可以添加前导零。

    string time = Console.ReadLine();
    DateTime outValue = DateTime.MinValue;
    if (time.Length == 6)
       time = "0" + time;
    bool error = DateTime.TryParseExact(time, "HH:mmtt" /*"hh:mmtt"*/, CultureInfo.InvariantCulture, DateTimeStyles.None, out outValue);

    Console.WriteLine(error);
    Console.WriteLine(outValue);
    Console.Read();

但最好使用Jamiec指出的H:mmtt模板

答案 2 :(得分:1)

这是因为你写了HH:mmtt。 试试这个:

bool error = DateTime.TryParseExact(time, "H:mm:tt" /*"h:mm:tt"*/,
CultureInfo.InvariantCulture, DateTimeStyles.None, out outValue);