当我尝试执行以下操作时,我得到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
答案 0 :(得分:58)
您需要将时间分隔符添加到字符串中。试试这个:
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秒数。秒数可以包括任意精度的十进制数字。
答案 1 :(得分:9)
你一定错过了标准中的内容。以下内容:
System.Xml.XmlConvert.ToString(TimeSpan.FromHours(12))
给我字符串PT12H
。因此,时间部分似乎需要以T
作为前缀。以下解析正确:
System.Xml.XmlConvert.ToTimeSpan("PT25H")
(要TimeSpan
字符串化为1.01:00:00
。)
答案 2 :(得分:2)
System.Xml.XmlConvert.ToTimeSpan("PnYnMnDTnHnMnS")
请使用以下格式。
P - 指定符必须放在日期格式之前。
nY - 年数,例如:2Y
nM - 月数:4M
nD - 天数ex:6D
T - 必须在时间格式之前放置的指示符
nH - 小时数ex:8H
nM - 分钟数:12M
nS - 秒数:14S
System.Xml.XmlConvert.ToTimeSpan("P2Y4M6DT8H14M18S")
这里,带有月份和分钟的混淆部分具有相同的字母来表示,但指定者的使用使它们分开以便于理解。