C# 从字符串解析日期时间时出现问题

C# 从字符串解析日期时间时出现问题,c#,parsing,datetime,gmt,C#,Parsing,Datetime,Gmt,我目前正在尝试解析从每隔几分钟从web下载的xml中获取的字符串。字符串如下所示: Thu Jul 12 08:39:56 GMT+0100 2012 起初我只是做了一个string.split,取出时间之后的所有内容(GMT+0100 2012),并在日期之后插入2012 在日期更改为: Thu Jul 12 08:39:56 GMT+0000 2012 所以我想动态地调用GMT+无论什么,因为他们用c#给我发送字符串 如果您有任何建议,我们将不胜感激。请尝试解析您的日期。您可以使用Dat

我目前正在尝试解析从每隔几分钟从web下载的xml中获取的字符串。字符串如下所示:

Thu Jul 12 08:39:56 GMT+0100 2012
起初我只是做了一个
string.split
,取出时间之后的所有内容(
GMT+0100 2012
),并在日期之后插入2012

在日期更改为:

Thu Jul 12 08:39:56 GMT+0000 2012
所以我想动态地调用GMT+无论什么,因为他们用c#给我发送字符串


如果您有任何建议,我们将不胜感激。

请尝试解析您的日期。

您可以使用
DateTime.ParseExact
,并使用:

如果字符串和格式字符串不完全匹配,这将引发格式异常,因此您可能希望使用
DateTime.TryParseExact
,如果失败,将返回
false


您可能希望使用保留时区信息的
DateTimeOffset
,而不是
DateTimeOffset
,因为-这对您的应用程序可能很重要。

您可以做两件事:首先,您应该能够使用自定义格式字符串和ParseExact方法,从DateTime或DateTimeOffset(如果邮票的实际时区很重要,我会使用DateTimeOffset,而不仅仅是UTC或本地时区中的等效时间)

看看:

格式字符串可能类似于“
@”ddd-MMM-dd-HH:mm:ss'GMT'zzzz-yyyy”

然而,有一个障碍;.NET时区偏移(“zzzz”或简称“K”)当表示为字符串时,始终在小时和分钟之间包含一个冒号,而您的输入字符串没有。我不知道如何指定时区偏移量没有/不应该有这个冒号,并且我非常确定尝试在没有冒号的情况下解析它会导致错误

最简单的解决方法是在解析字符串之前从字符串中删除该特定冒号。给定输入的代码只是删除字符串中的最后一个冒号字符:

var updatedString = inputString.Remove(inputString.LastIndexOf(':'), 1);
这应该起作用:

XmlConvert.ToDateTime(textBox1.Text, "ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy");

你到底想用这个日期做什么?提取时区信息?转换为当地时间?解析为当地日期,是的,在日期时间库上它不喜欢GMT+0000,我相信它似乎只喜欢GMT,但可能我遗漏了什么。我肯定需要2012年之后的一天(7月12日)谢谢大家的帮助!!使用OP所说的不起作用的示例,我得到:“字符串未被识别为有效的日期时间。”使用vanilla
DateTime.Parse
.DateTime.Parse时,给定的字符串会失败…请参阅我上面的评论,2012年需要在7月12日之后,而不是在末尾。此外,字符串中的任何位置似乎都不象GMT+0000。是的,GMT+0000有时会更改为GMT+0100。如果此应用程序运行到2012年之后,则2012年会更改。下面是示例我正在阅读的日期字符串的ce:@KeithS-是的,我自己在测试几个不同的字符串时遇到了这个问题,并将
GMT
转义为一个文本。虽然没有冒号,但
zzzz
K
处理得很好。@Oded:太好了。好吧,回答得很好;我唯一推荐的另一件事是将它解析为DateTimeOffset,它将时间保留在规定的时区内,而不是立即转换为本地或UTC。@KeithS fair point。如果这对操作有影响,它将添加到我的答案中。Keith,我正在尝试您的解决方案,但我不确定如何逃逸GMT,我在整个字符串前面加了@以使其不重要,但它仍然在抱怨:DateTime convertedDate=DateTime.ParseExact(datetest3,@“ddd-MMM-dd-HH:MM:SS'GMT'zzzz-yyyy”,System.Globalization.CultureInfo.InvariantCulture);
XmlConvert.ToDateTime(textBox1.Text, "ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy");