将特定的ISO8601 TimeSpan("P2M2W5D")转换为C#TimeSpan

Ale*_*scu 4 c# datetime parsing iso8601 xml-parsing

我一直在解析ISO8601 TimeSpan值一段时间,直到我遇到一个导致我的代码抛出System.FormatException:

TimeSpan ts = XmlConvert.ToTimeSpan("P2M2W5D");
Run Code Online (Sandbox Code Playgroud)

看看ISO8601标准,它似乎是一个正确的输入,也没有任何含糊之处(M明确指的是几个月,而不是几分钟).

System.FormatException was unhandled by user code
HResult=-2146233033
Message=The string 'P2M2W5D' is not a valid TimeSpan value.
Source=System.Xml
Run Code Online (Sandbox Code Playgroud)

Son*_*nül 7

XmlConvert.ToTimeSpan方法

参数

s类型:System.String

要转换的字符串.字符串格式必须符合W3C XML Schema Part 2:Datatypes建议的持续时间.

持续时间部分

持续时间的词汇表示是[ISO 8601]扩展格式PnYn MnDTnH nMnS,其中nY表示年nM 数,月nD数,天数,'T'日期/时间分隔符,nH小时nM数,分钟nS数和数字几秒钟

来自ISO 8601日期和时间格式

在持续时间的词法格式中,以下字符也用作指示符,并以词汇格式显示为自身:

  • P - 用作持续时间指示符,在表示给定持续时间的数据元素之前.
  • Y - 遵循持续时间内的年数.
  • M - 遵循持续时间内的月数或分钟数.
  • D - 遵循持续时间内的天数.
  • H - 遵循持续时间内的小时数.
  • S - 遵循持续时间中的秒数.

据我所知W,XML规范中没有持续时间格式.

这可以作为例子;

TimeSpan ts = XmlConvert.ToTimeSpan("P2M5D");
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述