【问题标题】:What is a good format for Duration in JSON?JSON中持续时间的好格式是什么?
【发布时间】:2018-11-01 11:08:01
【问题描述】:

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

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

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

【问题讨论】:

  • 请注意,持续时间和时间并不完全相同。当您穿越时区时,持续时间不会改变,但时间会改变。当以仅使用持续时间的方式在程序之外使用的方式表示时间时,这可能会导致复杂化。
  • 是的,我不确定措辞。我说的是持续时间。
  • 正如您所说,JSON 对此没有直接支持,因此真正由 JSON 的生产者和消费者来就特定情况下有意义的事情达成一致。
  • 要回答您的毫秒问题,根据您链接的文档,8601 中的最后一个单元支持分数。所以一毫秒似乎是可能的。
  • 如您所见,没有“可信和/或官方来源”。 JSON 遗漏了很多东西……无论如何,我也使用 .NET,所以我选择了 TimeSpan.Ticks,它是一个 Int64。 JSON 支持任何类型的整数,但 Javascript 仅支持 MAX_SAFE_INTEGER (9007199254740991)。因此,如果需要 Javascript 互操作,我最多只能表示 10424.23:58:45.4740991(约 1 万天)。

标签: .net time timespan duration iso8601


【解决方案1】:

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

1 个滴答声是 100 纳秒。一毫秒内有 10,000 个滴答声。

ISO 8601:现有标准

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

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

  • 1036800000 毫秒
  • P12D

您可以通过不同方式使用 ISO 8601 持续时间,例如 P1Y2M10DT2H30M

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

请记住,ISO 8601 也解决了在夏令时切换或切换到夏令时时的问题。

PT36HP1DT12H 不同。

Schema.org

在互联网上的 schema.org 上有不同的结构化数据架构。他们的数量正在使用Duration,应该用ISO 8601 duration format表示。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-27
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 2017-02-14
      相关资源
      最近更新 更多