如何转换的时间跨度ISO8601的C#时间跨度?(How do I convert an ISO86

2019-06-18 05:16发布

我得到一个System.FormatException当我尝试做以下(为例):

TimeSpan ts = XmlConvert.ToTimeSpan("P72H");

我调查了ISO8601标准 ,它似乎是正确的,但我不能让它解析小时没有抛出任何异常,无论我做什么。

谢谢!

编辑:

异常详细信息:

System.FormatException was unhandled by user code
HResult=-2146233033
Message=The string 'P72H' is not a valid TimeSpan value.
Source=System.Xml

Answer 1:

你需要时间分隔符添加到您的字符串。 试试这个:

TimeSpan ts = XmlConvert.ToTimeSpan("PT72H");

见周期指标- http://www.w3.org/TR/xmlschema-2/#duration

3.2.6.1词汇表示
对于持续时间的词汇表示是[ISO 8601]扩展格式PnYn MnDTnH NMNS,其中ny表示的年数,NM月数,ND的天数,“T”是日期/时间分隔符,NH数小时,NM分钟和NS的秒数的数量。 秒数可以包括十进制数字到任意精度。



Answer 2:

你一定错过了标准的东西。 下列:

System.Xml.XmlConvert.ToString(TimeSpan.FromHours(12))

给我的字符串PT12H 。 因此它似乎需要用前缀的时间部分T 。 而下面的正确分析:

System.Xml.XmlConvert.ToTimeSpan("PT25H")

(要在TimeSpan该stringifies到1.01:00:00 )。



Answer 3:

请使用以下格式System.Xml.XmlConvert.ToTimeSpan("PnYnMnDTnHnMnS")

P - 该标志必须放在日期格式之前。

纽约 - 年数,比如:2Y
纳米 - 个月前号:4M
ND - 天前数:6D

笔 - 必须在时间格式前放置的标志

nH的 - 小时前数:8H
纳米 - 纪要前数:12M
NS - 秒前数:14S

System.Xml.XmlConvert.ToTimeSpan("P2Y4M6DT8H14M18S")

这里,月份和分钟的混乱部分具有相同的字母来表示,但标志的使用,使它们分开很容易理解。



文章来源: How do I convert an ISO8601 TimeSpan to a C# TimeSpan?