19

JSON 文本 ( RFC 4627 ) 对对象、数组、字符串、数字、布尔值(字面意思truefalse)和null. 但是,它没有定义任何时间信息,如日期和时间,这在应用程序中很常见。鉴于RFC 4627中规定的约束和语法,当前使用哪些方法来表示 JSON 中的时间?

受访者须知:此问题的目的是记录已知流通的各种方法以及示例和相关优缺点(最好来自现场经验)。

4

5 回答 5

13

我在使用中看到的唯一表示(虽然,诚然,我的经验仅限于DOJO)是ISO 8601,它工作得很好,几乎代表了你可能想到的任何东西。

例如,您可以访问上面的链接。

优点:

  • 代表几乎任何你可能扔给它的东西,包括时间跨度。(即 3 天 2 小时)

缺点:

  • 嗯……其实我也不知道。除了可能需要一点时间来适应?如果没有内置函数来解析它,它当然很容易解析。
于 2008-09-18T10:29:25.530 回答
5

ISO 8601似乎是一个自然的选择,但如果你想用在浏览器中运行的 JavaScript 来解析它,你将需要使用一个库,因为浏览器对 JavaScriptDate对象中可以解析 ISO 8601 日期的部分的支持不一致,即使在相对较新的浏览器中。ISO 8601 的另一个问题是它是一个庞大而丰富的标准,并且日期/时间库仅支持它的一部分,因此您必须选择您使用的库支持的 ISO 8601 子集来使用。

相反,我将时间表示为自 1970-01-01T00:00Z 以来的毫秒数。在更旧的浏览器中,对象的构造函数可以理解这一点Date,至少可以追溯到 IE7(这是我测试过的最古老的浏览器)。

于 2012-06-05T15:19:08.967 回答
2

没有固定的文字,所以使用对你来说最简单的。对于大多数人来说,这要么是 UTC 输出的字符串,要么是以 UTC 为中心的时间码的长整数。

阅读更多背景信息:http: //msdn.microsoft.com/en-us/library/bb299886.aspx

于 2008-09-18T10:19:45.693 回答
0

我推荐使用RFC 3339格式,它既美观又简单,并且被越来越多的语言、库和工具所理解。

不幸的是,RFC 3339、Unix 纪元时间和 JavaScript 毫秒时间都还不够准确,因为它们都没有考虑闰秒!在某些时候,我们都将不得不再次重新审视时间表示。也许下次我们可以完成它。

于 2014-12-23T23:46:31.210 回答
0

很抱歉对这样一个老问题发表评论,但在随后的几年里,出现了更多的解决方案。

在 JSON 中表示日期和/或时间信息是在 JSON 中表示复杂类型和复杂数据结构的更普遍问题的一个特例。使问题变得棘手的部分原因是,如果您将复杂类型(如时间戳)表示为 JSON 对象,那么您需要有一种表达关联数组和对象的方式,这恰好看起来像您的时间戳的 JSON 对象表示,就像其他一些标记的对象。

Google 的协议缓冲区有一个JSON 映射,它具有时间戳类型的概念,并具有定义的语义。

MongoDB 的BSON有一个扩展 JSON,上面写着{ "$date": "2017-05-17T23:09:14.000000Z" }.

除了日期时间之外,两者还可以表达更复杂的结构。

于 2017-05-18T21:37:17.460 回答