有一个字符串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。 谁知道为什么?
答案 0 :(得分:8)
您需要使用HH
代替hh
说明符。
HH
specifier适用于24-hour clock格式(00
至23
)但hh
specifier适用于12-hour clock格式(01
至12
)。
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个随机日期的两种方法的比较很少: