2012-07-23 60 views
2

我目前正试图解析从每隔几分钟从网上下载的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 

所以想动态pasre的GMT +什么,因为他们给我这个字符串在C#。

任何意见,将不胜感激。

+1

究竟是你想用这个日期来做些什么呢?剥离时区信息?转换为当地时间? – Arithmomaniac 2012-07-23 18:46:43

+0

解析到本地日期和是在DateTime库它不喜欢GMT + 0000它似乎只喜欢GMT我相信,但也许我错过了一些东西。我肯定需要2012年之后的一天(7月12日) – 2012-07-23 18:48:15

+0

谢谢大家的帮助! – 2012-07-23 20:19:48

回答

5

可以使用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保存时区信息,@Keithcommented - 这可能是你的应用程序非常重要。

+0

有的时候,GMT + 0000有时会更改为GMT + 0100 ..如果这个应用跑过去2012年,那么2012年会发生变化。这里是我正在阅读的日期字符串的来源:https://s3-eu-west-1.amazonaws.com/olympics-outdoor/xml/images.xml – 2012-07-23 18:58:50

+0

@KeithS - 是的,我自己遇到这个问题时测试几个不同的字符串,并将'GMT'转义为文字。尽管没有冒号,但'zzzz'和'K'都处理得很好。 – Oded 2012-07-23 19:05:20

+0

@Oded:甜。那好吧,很好的答案;只有其他的东西我建议可能解析它到一个DateTimeOffset保留在规定时间的时间,而不是将其转换为本地或UTC。 – KeithS 2012-07-23 19:06:47

0

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

+0

使用示例OP说不起作用,我得到:“字符串未被识别为有效的DateTime。”与香草'DateTime.Parse'。 – Oded 2012-07-23 18:50:27

+0

DateTime.Parse失败,给出的字符串...看到我上面的评论,2012年需要在7月12日以后,而不是结束。也似乎不喜欢格林尼治标准时间+ 0000。 – 2012-07-23 18:52:49

1

有两件事情可以做:首先,你应该能够使用自定义格式字符串与ParseExact方法,无论是从日期时间或的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); 
0

这应该工作:

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