3

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

任何意见,将不胜感激。

4

4 回答 4

6

您可以使用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保留的时区信息- 这可能对您的应用程序很重要。

于 2012-07-23T18:55:33.497 回答
1

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

看看:DateTime 自定义格式字符串

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

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

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

var updatedString = inputString.Remove(inputString.LastIndexOf(':'), 1);
于 2012-07-23T18:56:30.023 回答
0

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

于 2012-07-23T18:47:04.587 回答
0

这应该有效:

XmlConvert.ToDateTime(textBox1.Text, "ddd MMM dd HH:mm:ss 'GMT'zzzz yyyy");
于 2012-07-23T19:11:33.013 回答