我有以以下格式显示日期和时间的字符串:
2013 年 1 月 3 日星期四 15:04:29
我如何将其转换为 DateTime?我试过了:
string strDateStarted = "Thu Jan 03 15:04:29 2013"
DateTime datDateStarted = Convert.ToDateTime(strDateStarted);
但这不起作用。在我的程序中,此值是从日志文件中读取的,因此我无法更改文本字符串的格式。
使用上*Parse*
定义的方法之一DateTime
。
要么 要么TryParseExact
将ParseExact
采用与日期字符串相对应的格式字符串。
我建议阅读自定义日期和时间格式字符串。
在这种情况下,相应的格式字符串将是:
"ddd MMM dd HH:mm:ss yyyy"
要使用的:
DateTime.ParseExact("Thu Jan 03 15:04:29 2013",
"ddd MMM dd HH:mm:ss yyyy",
CultureInfo.InvariantCulture)
尝试使用DateTime.ParseExact
.
在您的情况下,指定的格式应为:
Thu Jan 03 15:04:29 2013
并且调用应该如下所示:
DateTime logDate = DateTime.ParseExact(logValue, "ddd MMM dd HH:mm:ss yyyy",
CultureInfo.CreateSpecificCulture("en-US"));
第三个参数设置为美国文化,使ddd
和MMM
部分分别对应Thu
和Jan
。
在这种情况下,由于数据的来源,我建议使用ParseExact
而不是。TryParseExact
如果您正在解析用户输入,请始终使用TryParseExact
,因为您不能相信用户遵循了请求的格式。但是,在这种情况下,源是具有明确定义格式的文件,因此任何无效数据都应视为异常,因为它们是异常的。
另请注意,*ParseExact
方法非常无情。如果数据不完全符合指定的格式,则将其视为错误。
使用以下代码:
string strDateStarted = "Thu Jan 03 15:04:29 2013";
DateTime datDateStarted;
DateTime.TryParseExact(strDateStarted, new string[] { "ddd MMM dd HH:mm:ss yyyy" }, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out datDateStarted);
Console.WriteLine(datDateStarted);
并确定时间是否为 24 HRS 格式,然后使用 HH。更多细节
string yourDateTimeRepresentation = "R"; //for example
DateTime dt = DateTime.ParseExact(strDateStarted , yourDateTimeRepresentation , System.Globalization.CultureInfo.CurrentCulture);