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は規定しています。
Date][2]の[
toJSON`]3メソッドが出力するフォーマットを使用する必要があります。
2012-04-23T18:25:43.511Z
その理由は以下の通りです。
1.人間が読めるように、しかも簡潔にまとめられている
1.正しくソートされている
1.秒単位の表示が可能なので、時系列の再構築に役立つ
1.ISO 8601]4に準拠しています。
1.ISO 8601は、10年以上前から国際的に確立されています。
1.ISO 8601は、W3C、RFC3339、XKCDによって承認されています。
そうは言っても、これまでに書かれたすべての日付ライブラリは「1970年からのミリ秒」を理解できます。ですから、簡単なポータビリティのためには、ThiefMasterが正しいのです。
JSONは日付について何も知りません。.NETが行っているのは、非標準のハック/拡張です。
私は、JavaScriptのDate
オブジェクトに簡単に変換できるフォーマット、つまり、new Date(...)
に渡すことができるフォーマットを使用します。最も簡単で、おそらく最もポータブルなフォーマットは、1970年からのミリ秒を含むタイムスタンプです。
正しいフォーマットはありません; JSON仕様では、日付を交換するためのフォーマットを規定していないため、さまざまな方法があります。
ISO 8601フォーマット]2(Wikipedia参照)で表された日付が最適なフォーマットであることは間違いありません。生成されるjsonをコントロールできる場合、例えば、他のシステムにjson形式でデータを提供する場合、日付交換フォーマットとして8601を選択するのは良い選択です。
生成されたjsonを制御できない場合、例えば、複数の異なる既存のシステムからのjsonを消費する場合には、予想される異なるフォーマットを処理するための日付解析ユーティリティー関数を持つことが最良の対処法です。