【问题标题】:ParseExact with counter of hour from 0 to 23ParseExact,小时计数器从 0 到 23
【发布时间】:2014-06-25 07:30:59
【问题描述】:

我在使用ParseExact 将字符串转换为日期时遇到了一些问题

string _date = " 2014-06-23-12:40:18 "
DateTime dateresult = DateTime.ParseExact(
_date.Trim(),
"yyyy-MM-dd-hh:mm:ss", 
CultureInfo.InvariantCulture, 
DateTimeStyles.None)

dateresult 的值为 23/06/2014 00:40:18。问题是生成的日期时间的小时是 0 而不是 12 !!!我需要保持正常的小时计数器从 0 到 23

  • 如何更改我的代码来修复此错误?

【问题讨论】:

    标签: c# string parsing datetime format


    【解决方案1】:

    尝试使用HH format specifier 而不是hh

    DateTime dateresult = DateTime.ParseExact(_date.Trim(), "yyyy-MM-dd-HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None)
    

    【讨论】:

    • 最好使用 H 说明符,因为 OP 想要将 0 转换为 23,而不是将 00 转换为 23
    • 是的,可能会更好。但问题并不完全清楚,现在看来他只是想解决问题并正确获取时间。他没有说他想将小时显示为 02:20 还是 2:20
    【解决方案2】:

    尝试像这样更改代码。代替 hh,使用 HH 表示 24 小时格式

    string _date = " 2014-06-23-12:40:18 ";
    DateTime dateresult = DateTime.ParseExact(_date.Trim(), "yyyy-MM-dd-HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None);
    

    【讨论】:

      【解决方案3】:

      hh format specifier 适用于12 小时制,即0112

      使用H format specifier 表示24 小时制,即023

      “H”自定义格式说明符将小时表示为从 0 开始的数字 到 23 岁;也就是说,小时由从零开始的 24 小时表示 从午夜开始计算小时数的时钟。个位数的小时是 格式不带前导零。

      string _date = "2014-06-23-12:40:18";
      DateTime dateresult = DateTime.ParseExact(_date.Trim(), "yyyy-MM-dd-H:mm:ss", 
                            CultureInfo.InvariantCulture, DateTimeStyles.None);
      

      【讨论】:

        猜你喜欢
        • 2014-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多