协慌网

登录 贡献 社区

“正确” 的 JSON 日期格式

我已经看到了许多不同的 JSON 日期格式标准:

"\"\\/Date(1335205592410)\\/\""         .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\""    .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z"              JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00"             ISO 8601

哪一个是正确的?还是最好的?这有什么标准吗?

答案

JSON本身没有指定日期应该如何表示,但 JavaScript 确实如此。

应该使用DatetoJSON方法发出的格式:

2012-04-23T18:25:43.511Z

原因如下:

  1. 它具有人类可读性,但也很简洁

  2. 它正确排序

  3. 它包括小数秒,可以帮助重建年表

  4. 它符合ISO 8601

  5. ISO 8601 已在国际上建立了十多年

  6. ISO 8601 得到W3CRFC3339XKCD 的认可

话虽这么说 ,每个日期库都可以理解 “自 1970 年以来的毫秒”。所以为了便于携带,ThiefMaster 是对的。

JSON 对日期一无所知。 .NET 所做的是非标准的黑客 / 扩展。

我会使用一种格式,可以很容易地转换为 JavaScript 中的Date对象,即可以传递给new Date(...)的格式。最简单且可能最便携的格式是自 1970 年以来包含毫秒的时间戳。

没有正确的格式 ; JSON 规范没有指定交换日期的格式,这就是为什么有这么多不同的方法来做到这一点。

最好的格式可以说是ISO 8601 格式的日期见维基百科 ); 它是一种众所周知且广泛使用的格式,可以跨多种语言处理,非常适合互操作性。例如,如果您可以控制生成的 json,则以 json 格式向其他系统提供数据,选择 8601 作为日期交换格式是一个不错的选择。

例如,如果您无法控制生成的 json,那么您是来自几个不同现有系统的 json 的使用者,处理此问题的最佳方法是使用日期解析实用程序函数来处理预期的不同格式。