解决从字符串解析DateTime的麻烦

时间:2012-07-23 18:39:27

标签: c# parsing datetime gmt

我目前正在尝试解析从每隔几分钟从网上下载的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#中发送了这个字符串。

任何建议都将受到赞赏。

4 个答案:

答案 0 :(得分:6)

您可以将DateTime.ParseExactcustom date and time format string

一起使用
DateTime.ParseExact("Thu Jul 12 08:39:56 GMT+0000 2012", 
                    "ddd MMM dd hh:mm:ss 'GMT'K yyyy",
                    CultureInfo.InvariantCulture)

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

而不是DateTime您可能希望使用保留时区信息的DateTimeOffset@Keith commented - 此可能对您来说非常重要应用

答案 1 :(得分:1)

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

看看:DateTime custom format string

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

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

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

var updatedString = inputString.Remove(inputString.LastIndexOf(':'), 1);

答案 2 :(得分:0)

尝试DateTime.Parse方法来解析您的日期。

答案 3 :(得分:0)

这应该有效:

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