C#如何将XML读取的PT0S值转换为decimal类型存入数据库
问题解决方法
问题原因
你读取到的PT0S是ISO 8601标准的持续时间格式字符串,不是直接的数值格式,因此无法直接用Convert.ToDecimal转换:
- 格式前缀
P表示周期(Period),T表示后续为时间部分,PT0S的完整含义是「时间间隔为0秒」 - 你提供的XML结构中该字段标注
type="double",对应的就是持续时间转换为数值单位后的浮点值,和后续转换逻辑匹配。
解决步骤
C# 自带的System.Xml.XmlConvert类专门适配XML标准格式的转换,你可以先把字符串解析为TimeSpan类型,再按你的业务要求转为对应单位的数值,最终转成decimal即可。
示例代码
// 从XML读取到的原始值 string durationStr = "PT0S"; // 解析ISO 8601持续时间为TimeSpan TimeSpan timeSpan = System.Xml.XmlConvert.ToTimeSpan(durationStr); // 按业务需要选择转换单位,示例为转总秒数,也可替换为TotalMilliseconds/TotalMinutes等 decimal result = Convert.ToDecimal(timeSpan.TotalSeconds); // 后续直接将result存入decimal类型的数据库字段即可
扩展说明
如果你的业务逻辑中该字段对应其他时间单位,只需替换TotalSeconds为对应属性即可,比如:
- 存总毫秒数:使用
timeSpan.TotalMilliseconds - 存总分钟数:使用
timeSpan.TotalMinutes
该方法对所有合法的ISO 8601持续时间格式都生效,比如PT1M30S(1分30秒)解析后转总秒数会得到90,无需额外适配。
内容的提问来源于stack exchange,提问作者Sabyasachi Mukherjee
相关产品推荐
相关产品推荐

