DateTime.ParseExact的正确格式

时间:2014-08-12 07:56:26

标签: c# datetime datetime-format

我有以下字符串,我需要解析为DateTime:

Thu Aug 14 2014 00:00:00 GMT 0100 (GMT Summer Time)

我不确定要为我的DateTime.ParseExact提供什么格式才能实现这一目标。我在标准日期/时间格式字符串中找到的最接近的是完整日期/时间模式(长时间),如下所示,但这不起作用

DateTime.ParseExact("Thu Aug 14 2014 00:00:00 GMT 0100 (GMT Summer Time)", "F", CultureInfo.InvariantCulture); // FormatException

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果偏移量不重要,我建议您在时间之后截断字符串。

看起来格式应该允许通过查找位置16之后的第一个空格(示例中的时间开始;如果日期编号更短,则在时间的一部分):

int endOfTime = text.IndexOf(' ', 16);
if (endOfTime == -1)
{
    throw new FormatException("Unexpected date/time format");
} 
text = text.Substring(0, endOfTime);
DateTime dateTime = DateTime.ParseExact(text, "ddd MMM d yyyy HH:mm:ss",
                                        CultureInfo.InvariantCulture);

(我假设月份和日期的名称​​总是英文。)

答案 1 :(得分:0)

如果你确定它将永远是格林尼治标准时间的夏令时,你不能使用它:

var str = "Mon Jan 05 1987 07:45:30 GMT+0000 (GMT Summer Time)";
var f = "ddd MMM dd yyyy hh:mm:ss 'GMT'K' (GMT Summer Time)'";
var dateTime = DateTime.ParseExact(str, f, CultureInfo.InvariantCulture);

或者,如果夏季/冬季可以改变,但总是GMT,无论偏移。

var str = "Mon Jan 05 1987 07:45:30 GMT+0000 (GMT Summer Time)".Split('(')[0].Trim();
var f = "ddd MMM dd yyyy hh:mm:ss 'GMT'K";
var dateTime = DateTime.ParseExact(str, f, CultureInfo.InvariantCulture);