gpt4 book ai didi

c# - 如何将 ISO8601 TimeSpan 转换为 C# TimeSpan?

转载 作者:IT王子 更新时间:2023-10-29 04:03:19 26 4
gpt4 key购买 nike

当我尝试执行以下操作(作为示例)时,我收到了 System.FormatException:

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

我调查了 ISO8601 Standard它似乎是正确的,但无论我做什么,我都无法让它在不抛出异常的情况下解析小时数。

谢谢!

编辑:

异常详情:

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

最佳答案

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

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

请参阅持续时间规范 - http://www.w3.org/TR/xmlschema-2/#duration

3.2.6.1 Lexical representation
The lexical representation for duration is the [ISO 8601] extended format PnYn MnDTnH nMnS, where nY represents the number of years, nM the number of months, nD the number of days, 'T' is the date/time separator, nH the number of hours, nM the number of minutes and nS the number of seconds. The number of seconds can include decimal digits to arbitrary precision.

根据评论编辑/更新

因为有人质疑为什么字符串 P2M2W5D 不会被视为有效的 TimeSpan,因为 W 是 ISO 8601 的一部分标准,我想添加这个更新,这样如果有人遇到那个问题,他们就不必通读评论来获得答案。对于有问题的原始字符串 P72HP2M2W5D 而言,问题在于字符串必须符合 W3C XML 架构(请参阅 XmlConvert.ToTimeSpan 的文档)。当我们查看 W3C XML Schema(上面的链接)时,它引用了 ISO 8601 标准,特别是第 5.5.3.2.1 节,其中给出了 W 不是有效字符的原因在 XML 架构中:

Since weeks have no defined carry-over point (52 or 53), weeks should not be used in these applications

关于c# - 如何将 ISO8601 TimeSpan 转换为 C# TimeSpan?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466188/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com