4

我有以以下格式显示日期和时间的字符串:

2013 年 1 月 3 日星期四 15:04:29

我如何将其转换为 DateTime?我试过了:

string strDateStarted = "Thu Jan 03 15:04:29 2013"
DateTime datDateStarted = Convert.ToDateTime(strDateStarted);

但这不起作用。在我的程序中,此值是从日志文件中读取的,因此我无法更改文本字符串的格式。

4

5 回答 5

9

使用上*Parse*定义的方法之一DateTime

要么 要么TryParseExactParseExact采用与日期字符串相对应的格式字符串。

我建议阅读自定义日期和时间格式字符串

在这种情况下,相应的格式字符串将是:

"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)
于 2013-03-22T12:54:07.150 回答
3

尝试使用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"));

第三个参数设置为美国文化,使dddMMM部分分别对应ThuJan


在这种情况下,由于数据的来源,我建议使用ParseExact而不是。TryParseExact如果您正在解析用户输入,请始终使用TryParseExact,因为您不能相信用户遵循了请求的格式。但是,在这种情况下,源是具有明确定义格式的文件,因此任何无效数据都应视为异常,因为它们是异常的。

另请注意,*ParseExact方法非常无情。如果数据不完全符合指定的格式,则将其视为错误。

于 2013-03-22T12:53:11.873 回答
3

使用以下代码:

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。更多细节

于 2013-03-22T13:01:52.700 回答
0

看看DateTime.TryParse()

于 2013-03-22T12:53:57.703 回答
0
string yourDateTimeRepresentation = "R"; //for example
DateTime dt = DateTime.ParseExact(strDateStarted , yourDateTimeRepresentation , System.Globalization.CultureInfo.CurrentCulture);
于 2013-03-22T12:57:00.690 回答