解析特定格式C#的日期时间值

时间:2015-06-16 14:13:50

标签: c# parsing datetime

有一个字符串2020-12-27 20:00:00。应用程序必须将其解析为DateTime结构。预期格式为yyyy-MM-dd hh:mm:ss。 我用:

DateTime.TryParseExact(timeString, "yyyy-MM-dd hh:mm:ss", 
                       CultureInfo.InvariantCulture, DateTimeStyles.None, out time)

但它不起作用。 TryParseExact返回false。 谁知道为什么?

3 个答案:

答案 0 :(得分:8)

您需要使用HH代替hh说明符。

HH specifier适用于24-hour clock格式(0023)但hh specifier适用于12-hour clock格式(0112)。

string s = "2020-12-27 20:00:00";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    // 27.12.2020 20:00:00
}

答案 1 :(得分:6)

hh为12小时格式,您应该使用HH 24小时

所以你的例子变成了:

DateTime.TryParseExact(timeString, "yyyy-MM-dd HH:mm:ss", 
                       CultureInfo.InvariantCulture, DateTimeStyles.None, out time)

答案 2 :(得分:0)

您可以使用我编写的方法,以便从任何格式的字符串转换DT:

Parent

用法:

public static DateTime? parseDate(this string date, string format = @"ddMMyyyy")
{                    
    format += "HHmmss";
    DateTime dt;            
    try 
    {
        string day = date.Substring(format.IndexOf('d'), 2);
        string month = date.Substring(format.IndexOf('M'), 2);
        string year = date.Substring(format.IndexOf('y'), 4);               
        string hour = date.Length - 1 > format.IndexOf('H')? date.Substring(format.IndexOf('H'), 2) : "00";
        string minute = date.Length - 1 > format.IndexOf('m')? date.Substring(format.IndexOf('m'), 2) : "00";
        string second = date.Length - 1 > format.IndexOf('s')? date.Substring(format.IndexOf('s'), 2) : "00";

        dt = DateTime.Parse(year + "/" + month + "/" + day + " " + hour + ":" + minute + ":" + second);
    }
    catch { return null; }
    return dt;
}

结果:2014/04/05 00:00

但是你是对的也许你应该只使用string date = "2014ASDA04QWER05zxc"; DateTime? dt = date.parseDate("yyyyxxxxMMxxxxdd"); 而不是DateTime.ParseExact,因为我的方法过于复杂。

使用20 000个随机日期的两种方法的比较很少: enter image description here