2012-07-23 131 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");