【发布时间】:2020-03-23 14:51:06
【问题描述】:
有谁知道使用 Y、M 等的“名义”值将 ISO 8601 持续时间字符串正确应用到 DateTime 的 C# 库?
使用System.Xml.XmlConvert::ToTimeSpan() 是错误的。它将 P1M 转换为 30 天的时间跨度,这意味着它使用“准确”值而不是“名义”值,这在我的大多数用例中都没有帮助:
不过,我不怪 ToTimeSpan(),因为 TimeSpan 不足以存储名义值。我需要一些可以应用于 DateTime 并获得“名义上正确”的结果的东西。应用“P1Y”的意思是“2020-01-01”最终为“2021-01-01”。
【问题讨论】:
-
@jpt 请你把你的问题说得更清楚一点。特别是,请您给出您期望的输入和您期望的输出的清晰示例。大多数人对 ISO-8601 的复杂性不够精通,无法了解
nominal与accurate的含义,而链接定义duration expressed amongst others in years, months, weeks or days需要进一步阅读才能真正理解。 -
您在寻找Noda Time(特别是“期间”)吗?完全披露,我不与 Noda Time 合作,所以我不知道它是否以你想要的方式反序列化,但如果 that lib 没有,我不会知道哪个会。
-
@RB - 这就是我提供文档链接的原因,而 DID 提供了我期望的输入和输出示例。无论如何,问题空间需要思考才能真正理解,因此任何不愿意这样做的人可能都不是回答我问题的最佳人选。
-
@gunr2171 - 不,这不是我问题的答案。这不太相关。 ISO 8601 为持续时间和日期/时间指定格式。我对使用 C# 将 Duration 应用于 DateTime 很感兴趣。