【发布时间】:2018-11-01 11:08:01
【问题描述】:
我意识到 JSON 没有真正的日期格式,考虑到 JavaScript 使用的是 ISO 8601,因此使用 ISO 8601 是一个不错的选择。持续时间呢? JavaScript 没有内置格式。
- 我遇到了ISO 8601 Durations 例如
P3Y6M4DT12H30M5S我没见过在野外使用太多。它看起来也非常冗长且难以阅读。据我所知,如果您需要,它也不支持毫秒。 - 我正在使用 C#,其
TimeSpan类型输出1.02:03:04.00500001 天、2 小时、3 分钟、4 秒和 5 毫秒。 - 我可以使用秒数或毫秒数作为整数。这完全是机器可读的,如果您使用秒或毫秒而不标记值,这并不明显。
我几乎从未见过野外的第一种格式。第二个对我来说似乎更直观,但我担心它在 .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