【问题标题】:How can I parse this datetime string?如何解析这个日期时间字符串?
【发布时间】:2014-02-09 08:59:38
【问题描述】:

我想不通,我哪里出错了?

我得到以下日期时间字符串,需要将其解析为日期时间:

string timestr = "1/20/2014 12:05:16 AM"

我试图像这样解析它:

DateTime.ParseExact( timestr,
                     "MM/dd/yyyy hh:mm:ss tt",
                     null);

当尝试这样做时,它会返回

“字符串未被识别为有效的日期时间”

有什么建议吗?

【问题讨论】:

    标签: c# string datetime datetime-parsing


    【解决方案1】:

    MM 用于0112

    使用M 代替112

    string timestr = "1/20/2014 12:05:16 AM";
    var date = DateTime.ParseExact(timestr,
                                   "M/dd/yyyy hh:mm:ss tt",
                                   CultureInfo.InvariantCulture);
    Console.WriteLine(date);
    

    输出将是;

    1/20/2014 12:05:16 AM
    

    这里是 demonstration

    欲了解更多信息,请查看;

    还要注意小时格式。 hh 用于0112HH 用于0023。如果您的小时数为131415 等。hh 格式将失败。

    由于您在DateTime.ParseExact 方法中使用null 作为IFormatProvider,这意味着它默认使用CurrentCulture。如果DateSeparator 不是/,您的方法将抛出FormatException 甚至 您的字符串和格式完全匹配,因为"/" format specifier 在自定义日期和时间格式中具有特殊含义,例如; 替换我当前文化或提供的文化日期分隔符

    【讨论】:

      【解决方案2】:

      试试这个:

      this.RequestDate = Convert.ToDateTime(this.DcmCreateDate).ToString("dd/MM/yyyy");
      

      【讨论】:

        【解决方案3】:

        请尝试

        string timestr = "1/20/2014 12:05:16 AM";
        DateTime dt = new DateTime();
        DateTime.TryParse(timestr, out dt);
        

        【讨论】:

        • 请不要只发布代码,请向用户解释代码的作用,以便他们从中学习,这也是他们来stackoverflow的原因
        • 顺便说一下,您不必必须初始化out parameterDateTime dt; 就足够了。
        • 如果 OP 的 CurrentCulture 不接受 M/dd/yyyy hh:mm:ss tt 作为标准日期和时间模式,您的 DateTime.TryParse 返回 false 并且您的 dt 将是 01/01/0001 00:00:00
        【解决方案4】:

        M-月份,从 1 到 12。

        “M”自定义格式说明符将月份表示为从 1 到 12 的数字(对于有 13 个月的日历,则从 1 到 13)。单位数月份的格式不带前导零。

        DateTime.ParseExact( timestr,"M/dd/yyyy hh:mm:ss tt",CultureInfo.InvariantCulture);
        

        Msdn

        【讨论】:

          【解决方案5】:

          你试过了吗

           DateTime returnedDate = new DateTime();
           DateTime.TryParse(timestr, out returnedDate);
          

          【讨论】:

          • 如果 OP 的 CurrentCulture 不接受 M/dd/yyyy hh:mm:ss tt 作为标准日期和时间模式,您的 DateTime.TryParse 返回 false 并且您的 returnedDate 将是 01/01/0001 00:00:00
          猜你喜欢
          • 2013-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多