我目前正在尝试解析从每隔几分钟从网上下载的 xml 获得的字符串。字符串如下所示:
Thu Jul 12 08:39:56 GMT+0100 2012
起初我只是做了 astring.split
并在时间 ( ) 之后取出所有内容GMT+0100 2012
并在日期之后插入 2012。
直到日期更改为:
Thu Jul 12 08:39:56 GMT+0000 2012
所以我想动态地解析 GMT+,因为他们在 c# 中向我发送了那个字符串。
任何意见,将不胜感激。
您可以使用DateTime.ParseExact
自定义日期和时间格式字符串:
DateTime.ParseExact("Thu Jul 12 08:39:56 GMT+0000 2012",
"ddd MMM dd hh:mm:ss 'GMT'K yyyy",
CultureInfo.InvariantCulture)
如果字符串和格式字符串不完全匹配,这将引发格式异常,因此您可能希望使用它将在失败DateTime.TryParseExact
时返回 a 。false
正如@Keith评论的那样,DateTime
您可能不想使用DateTimeOffset
保留的时区信息- 这可能对您的应用程序很重要。
您可以做两件事:首先,您应该能够使用来自 DateTime 或 DateTimeOffset 的自定义格式字符串和 ParseExact 方法(如果戳的实际时区很重要,我会使用 DateTimeOffset ,而不仅仅是等效时间在 UTC 或您当地的时区)。
格式字符串可能类似于@"ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy"
.
但是,有一个障碍;.NET 时区偏移(“zzzz”或简称“K”)在表示为字符串时总是在小时和分钟之间包含一个冒号,而您的输入字符串没有。我无法指定时区偏移量没有/不应该有这个冒号,我很确定尝试在没有冒号的情况下解析它会导致错误。
最简单的解决方法是在解析之前从字符串中删除该特定冒号。给定您输入的代码只是删除字符串中的最后一个冒号字符:
var updatedString = inputString.Remove(inputString.LastIndexOf(':'), 1);
尝试DateTime.Parse方法来解析您的日期。
这应该有效:
XmlConvert.ToDateTime(textBox1.Text, "ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy");