2010-08-18 153 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