2010-08-18 152 views
10

.NET 3.5中有一種內置方法將ISO 8601時間段轉換爲.NET TimeSpan/ticks /毫秒?將ISO 8601格式的時間段轉換爲ticks /毫秒

+0

@Timwi:我是一個簡潔的風扇。不過,我也是一個自然友善的人。那麼祝大家工作愉快,怎麼辦? – yas4891 2010-08-18 11:14:04

+0

,因爲SO(和其他Stack Exchange網站)的風格不這樣做。討論使用http://meta.stackoverflow.com。 – Richard 2010-08-18 11:20:52

+0

通過刪除它,我並不表示它不友好。這只是它對問題沒有任何貢獻。請記住,這不是個性化帖子的論壇。 – Timwi 2010-08-18 11:40:49

回答

1

不幸的是,.NET並沒有直接構建到.NET中。

.NET 4之前沒有TimeSpan.ParseExact可以在字符串的組件已知的情況下使用。

+0

已標記爲第一個回答。 – yas4891 2010-08-18 12:55:50

2

即使在.Net框架中沒有任何東西直接出現,我發現Joda.org已經實現了這樣的事情,我記得Jon做了一個端口它。NET稱爲noda-time

this source code的第一個視圖顯示他爲此實現了某些功能。也許你應該在這個項目中進一步調查。

+0

感謝您的鏈接。在那裏完成的相當令人印象深刻的工作 – yas4891 2010-08-18 12:25:58

1

沒有內置的方式。事實上,ISO 8601 durations實際上完全不符合TimeSpan或任何其他測量時間的確切方法。原因是ISO 8601的持續時間可能包含數年和數月。問題是一年可能有365或366天,一個月可能有28到31天。 Joda-Time solves this這個問題通過將這些不精確的時間段與瞬間相關聯。

除非你是幸運的在期間碰巧使用了P [YYYY] - [MM] - [日] T [HH]:[毫米]:[SS]格式,因爲這時你只需:

string period = "P0003-06-04T12:30:05"; 
TimeSpan span = new TimeSpan(DateTime.Parse(period.Remove(0,1)).Ticks); 
+0

對於我的具體任務,這通常應該是像「PT1S」或「PT0.05999999999S」,所以解析不是一個真正的問題。只是想爲它獲得一個好的解決方案。感謝您的回答! – yas4891 2010-08-18 12:13:46