JSON 中 Duration 的良好格式是什么?

What is a good format for Duration in JSON?

我意识到 JSON 没有真正的日期格式,使用 ISO 8601 是一个不错的选择,因为 JavaScript 使用的是 ISO 8601。持续时间呢? JavaScript 没有内置格式。

  1. 我遇到了 ISO 8601 Durations 例如P3Y6M4DT12H30M5S 我没见过它在野外使用太多。它看起来也非常冗长且难以阅读。据我所知,如果您需要的话,它也不支持毫秒。
  2. 我正在使用 C#,其 TimeSpan 类型输出 1.02:03:04.0050000 1 天 2 小时 3 分钟 4 秒 5 毫秒。
  3. 我可以使用秒数或毫秒数作为整数。这完全是机器可读的,如果您使用的是秒或毫秒而没有这样标记值,则并不明显。

我几乎没见过第一种格式。第二个对我来说似乎更直观,但我担心它在 .NET 之外并不为人所知。第三种格式可能是最跨平台的,但完全不是人类可读的。

我认为秒(或者对于需要这种精度水平的较短持续时间的项目,毫秒)是预期的单位。

基本上,持续时间是毫秒数或滴答数(如果您需要更高的精度)。

1 tick is 100 nanoseconds. There are 10,000 ticks in a millisecond.

ISO 8601:现有标准

最好的方法是使用您提到的通用标准 ISO 8601。它是人类和机器可读的。

什么对您来说更容易阅读和更改?

  • 1036800000 毫秒
  • P12D

您可以像 P1Y2M10DT2H30M 一样以不同的方式使用 ISO 8601 持续时间:

  • 在JavaScript
  • 中由moment.js处理
  • 以 JSON 格式作为 string 值传递
  • 在 C#
  • 中由 NodaTime 处理
  • 存储在数据库中

Keep in mind that ISO 8601 also resolves the issue when switching from or to Daylight saving time.

PT36H is not the same as P1DT12H.

Schema.org

schema.org 上的 Internet 上有不同的结构化数据架构。他们中的数量正在使用 Duration 应该用 ISO 8601 duration format.

来表示