NodaTime JSON.net serializer是否有理由不使用ISO8601 Time Interval格式来表达开始和结束时刻?
示例ISO8601时间间隔:
"2007-03-01T13:00:00Z/2008-05-11T15:30:00Z"
NodaTime Complex JSON:
{ Start: "2007-03-01T13:00:00Z", End: "2008-05-11T15:30:00Z" }
ISO8601格式是否不适合NodaTime中的区间概念?
答案 0 :(得分:4)
为什么NodaTime JSON.net序列化程序不使用ISO8601时间间隔格式来表示开始和结束时刻?
是。我在阅读ISO-8601时没有发现它。这不是一个非常好的原因,但它是正确的。
ISO8601格式是否不适合NodaTime中的区间概念?
不,它非常合适(与ISO-8601的其他部分一样好),我们绝对应该使用它。我不认为 ISO-8601指定起点是包容性的,结尾是独占的,但这不一定是个问题。
我怀疑我们想要使用的格式是扩展 ISO格式,以包含亚秒值,与其他所有内容一致,但我怀疑这种扩展是相当常见的。
我们需要在配置JSON序列化程序时将其作为一个选项,这有点令人讨厌,但我们绝对应该让它可用。
我已打开feature request 270来解决这个问题。
答案 1 :(得分:3)
我对此的回应与Jon的回应略有不同。我欢迎任何反驳。
为什么NodaTime JSON.net序列化程序不使用ISO8601时间间隔格式来表示开始和结束时刻?
是。通过将间隔的起点和终点保持为单独的值,它们可以由任何JSON解析器单独寻址。由于间隔的每个瞬间都以UTC表示(“Z”结尾),因此它们也可以单独排序。
这使得在基于JSON的数据库中执行范围查询变得非常容易,例如在RavenDB中。 (另见RavenDB-NodaTime)
它还允许快速计算有效性(start< = end)和duration(end-start),而不必中断JSON并拆分字符串。
ISO间隔格式可以在这里工作,但从JSON的角度来看,它不会那么方便。
ISO8601格式是否不适合NodaTime中的区间概念?
这非常适合Noda Time。它不适合JSON。我希望Noda Time的Interval.ToString()
和相关文本模式将使用ISO格式。如果他们不这样做,那么将来有一些工作要做。