C# 特定格式C的日期时间值解析#
有一个字符串C# 特定格式C的日期时间值解析#,c#,parsing,datetime,C#,Parsing,Datetime,有一个字符串2020-12-27 20:00:00。应用程序必须将其解析为DateTime结构。预期格式为yyyy-MM-dd hh:MM:ss。 我使用: 但它不起作用。TryParseExact返回false。 有人知道为什么吗?您需要使用HH而不是HH说明符 表示格式(00至23),但表示格式(01至12) hh是12小时格式,您应该使用hh24小时 因此,您的示例变成: DateTime.TryParseExact(timeString, "yyyy-MM-dd HH:mm:ss",
2020-12-27 20:00:00
。应用程序必须将其解析为DateTime结构。预期格式为yyyy-MM-dd hh:MM:ss
。
我使用:
但它不起作用。TryParseExact返回false。
有人知道为什么吗?您需要使用
HH
而不是HH
说明符
表示格式(00
至23
),但表示格式(01
至12
)
hh
是12小时格式,您应该使用hh
24小时
因此,您的示例变成:
DateTime.TryParseExact(timeString, "yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture, DateTimeStyles.None, out time)
您可以使用我编写的方法从任何格式的字符串转换DTs:
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;
}
用法:
string date = "2014ASDA04QWER05zxc";
DateTime? dt = date.parseDate("yyyyxxxxMMxxxxdd");
结果:2014/04/05 00:00
然而,您是对的,也许您应该使用带有HH的DateTime.ParseExact
,而不是HH
,因为我的方法过于复杂
使用20000个随机日期对两种方法进行比较:
哇。。这种方法到底是为了什么?o、 o将字符串拆分为片段通常是将其解析为DateTime的一个坏主意。我在字符串中有3种不同格式的dt,需要将它们转换为可为null的DateTime,因此我创建了自己的扩展方法:)这是非常无用的。代码可能适合您的情况,但它根本不可重用或国际化(提示:
DateTime.Parse()。你知道的?如果垃圾字符位于固定位置,也可以选择清除它们的输入。好吧,这可能不是这种情况下的最佳方法,但它可以工作,并且在性能方面也可以,而且我没有尝试使用tryparse来解析像“2014ASDA04QWER05zxc”这样的日期。可能有效,也可能无效。谢谢!我知道这将是一件糟糕的小事。
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;
}
string date = "2014ASDA04QWER05zxc";
DateTime? dt = date.parseDate("yyyyxxxxMMxxxxdd");