【问题标题】:Why DateTime.TryParse is receive error for simple input?为什么 DateTime.TryParse 是简单输入的接收错误?
【发布时间】:2016-09-30 08:21:35
【问题描述】:

为什么此代码收到“8:16AM”之类的输入错误:

        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 对象,我应该设置什么?

【问题讨论】:

  • 这是有效的,但是我收到的 API 时间格式为上午 8:16。好的,我可以在前面填写缺失的 0。这没什么大不了的,但是我想 msdn 也可以接受上午 8:16。感谢您的回答。祝你有美好的一天:)
  • 好的,我自己定义了格式。从我的角度来看,它并不那么聪明。我会填这样一个 0。谢谢。
  • 别忘了接受答案(作者:Jamiec)

标签: c# parsing datetime tryparse


【解决方案1】:

您使用了 HH,它需要 2 位数的小时。您可以通过08:16AM 或将HH 更改为H。

现场示例:http://rextester.com/IPNS3820

【讨论】:

  • 是的,你是对的,我自己定义了格式。我要填这样一个0。
【解决方案2】:

这是由于预计小时数为两位数。

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

    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 模板

【讨论】:

  • 是的,你是对的,我自己定义了格式。我要填这样一个0。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2022-06-11
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2013-06-04
    • 2020-06-12
    • 1970-01-01
    相关资源
    最近更新 更多