我目前正在尝试解析从每隔几分钟从网上下载的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#中发送了这个字符串。
任何建议都将受到赞赏。
答案 0 :(得分:6)
您可以将DateTime.ParseExact
与custom 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");