如何用JSON表示日期和/或时间信息?

时间:2008-09-18 10:13:38

标签: json data-formats

JSON文本(RFC 4627)具有对象,数组,字符串,数字,布尔值(字面意思truefalse)和null的明确表示。但是,它没有定义用于表示时间信息,如日期和时间,这在应用程序中非常常见。考虑到RFC 4627中列出的约束和语法,目前使用哪种方法来表示JSON中的时间?

对受访者的注意:这个问题的目的是记录已知的各种方法以及实例和相关的利弊(最好是从实地经验)。

5 个答案:

答案 0 :(得分:13)

我在使用中看到的唯一表示(尽管如此,我的经验仅限于DOJO)是ISO 8601,它运作良好,并且代表了您可能想到的任何事物。

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

优点:

  • 几乎代表你可以投入的任何东西,包括时间跨度。 (即3天,2小时)

缺点:

  • 嗯......其实我不知道。除了可能需要一些习惯吗?如果没有内置函数来解析它,那么解析肯定很容易。

答案 1 :(得分:5)

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

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

我建议使用RFC 3339格式,这种格式既美观又简单,并且可以通过越来越多的语言,库和工具来理解。

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

答案 4 :(得分:0)

很抱歉对这么老的问题发表评论,但在此期间,出现了更多的解决方案。

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

Google的protocol buffers有一个JSON mapping,它具有时间戳类型的概念,具有已定义的语义。

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

除了datetime之外,两者还可以表达更复杂的结构。