将GMT日期字符串转换为DateTime

8
如何将下列格式的字符串日期值转换为日期类型:
Wed Oct 02 2013 00:00:00 GMT+0100 (GMT Daylight Time)

将格式为02/10/2013的日期转换。

我已经尝试使用DateTime.ParseExact,但根本没有起作用:

DateTime.ParseExact(dateToConvert, "ddd MMM d yyyy HH:mm:ss GMTzzzzz",    CultureInfo.InvariantCulture);

3
哪些症状无法正常工作?你从哪里获得这个字符串? - Kirill Bestemyanov
7
你是否错过了日期中的一个“d”?原始日期格式为“ddd MMM dd yyyy HH:mm:ss GMTzzzzz”。 - Sam
调试模式的最简单方法是使用该模式格式化一些现有日期,并进行比较。 - Andrey
1
@SamWard,一个字母'd'对于单/双位数日子已经足够了,*(用于解析)* - Habib
2个回答

8
var dateToConvert = "Wed Oct 02 2013 00:00:00 GMT+0100 (GMT Daylight Time)";
var format =        "ddd MMM dd yyyy HH:mm:ss 'GMT'zzz '(GMT Daylight Time)'";

var date = DateTime.ParseExact(dateToConvert, format, CultureInfo.InvariantCulture);

Console.WriteLine(date); //prints 10/2/2013 2:00:00 AM for my locale

你需要指定以'GMT'zzz '(GMT 夏令时间)' 结尾。
你可以在format中使用单个d代替dd,效果良好。
您可以在此处检查演示

2
只需使用单个“d”进行解析即可。使用单个“d”更安全,因为它将同时处理一位数和两位数的日期。 - Habib
3
永远加一:我忘记了我也可以使用 ' ' 来自定义格式部分。 - Soner Gönül
@IlyaIvanov 有没有办法将日期转换为GMT +0100(GMT夏令时)或GMT +0000(GMT标准时间)? - t_plusplus
@t_plusplus 你可以通过使用 dateToConvert.Substring(0, dateToConvert.LastIndexOf("GMT") - 2) 来删除那个多余的部分。 - Ilya Ivanov

1
谢谢。这正是我在上面最后一条评论中解决问题所做的。
int gmtIndex = dateToConvert.IndexOf("G");

string newDate = dateToConvert.Substring(0, gmtIndex).Trim();

value = DateTime.ParseExact(newDate, "ddd MMM dd yyyy HH:mm:ss", CultureInfo.InvariantCulture);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接