【问题标题】:Convert String to DateTime with pattern "MM/dd/yyyy hh:mm:ss"使用模式“MM/dd/yyyy hh:mm:ss”将字符串转换为日期时间
【发布时间】:2014-04-09 11:33:24
【问题描述】:

我有一个包含"02/27/2014 23:00:28" 的字符串变量 当我使用以下代码将其转换为Datetime 类型时,转换失败(测试返回false 并且parsedDate 包含"01/01/0001 00:00:00"

代码:

string date = "02/27/2014 23:00:28"
string pattern = "MM/dd/yyyy hh:mm:ss";
DateTime parsedDate;
bool parsedSuccessfully = DateTime.TryParseExact(date, pattern, null, DateTimeStyles.None, out parsedDate);

谢谢!

【问题讨论】:

  • 顺便说一句,我猜你想将 date 变量发送到 DateTime.TryParseExact 方法,而不是 test 本身 =)

标签: c# date datetime


【解决方案1】:

由于您使用的是 24 小时格式,因此您需要使用大写的 HH 来表示小时。

MM/dd/yyyy HH:mm:ss

您还需要使用CultureInfo.InvariantCulture 而不是null 以确保/ 将用作日期分隔符。否则,它将被您的文化实际日期分隔符替换。 *

bool test = DateTime.TryParseExact(date, "MM/dd/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate);

【讨论】:

    【解决方案2】:

    hh specifier 用于0112

    使用HH specifier,即0023。 (24 小时制

    我认为你应该在你的DateTime.TryParseExact 方法中使用date 而不是test

    string date = "02/27/2014 23:00:28";
    string pattern = "MM/dd/yyyy HH:mm:ss";
    DateTime parsedDate;
    bool test= DateTime.TryParseExact(date, pattern,
                                      CultureInfo.InvariantCulture,
                                      DateTimeStyles.None, out parsedDate);
    Console.WriteLine(test); // True
    

    由于您在IFormatProvider 参数中使用null,因此它使用CurrentCulture。来自documentation;

    如果 provider 为 null,则对应的 CultureInfo 对象 使用当前文化。

    但是/ format specifier在你的字符串格式中有“用当前文化日期分隔符替换我”的特殊含义。

    这意味着,如果您当前区域性的日期分隔符不是/,您的解析操作将失败。这就是为什么你应该在这种情况下使用InvariantCulture

    这里是另一个答案:TryParseExact returns false, though I don't know why

    【讨论】:

      【解决方案3】:

      24 小时时间格式使用HH。所以你的格式应该是

      "MM/dd/yyyy HH:mm:ss"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-07
        • 1970-01-01
        • 1970-01-01
        • 2021-08-29
        • 1970-01-01
        • 2020-12-19
        • 2017-08-21
        相关资源
        最近更新 更多