OData ライブラリの RTM バージョンにアップグレードしました。DateTime の処理に矛盾があるように見えることに気付きました。不足している可能性があることを誰かが説明できるかどうか、または実際に問題があるかどうかを知りたいです。RTM ライブラリに加えて、2012 年 3 月 30 日バージョンの MS-ODATA に依存しています。
MS-ODATA は、次の形式で dateTimeUriLiteral を定義します (たとえば簡略化されています)。
YYYY-MM-DDTHH:MM:SS.NS (NS は nanoSeconds=1*7DIGIT として定義されます)
また、MS-ODATA は VJsonDateTime を恐ろしい /Date(...)/ 形式として定義しています。
ただし、詳細な JSON シリアル化でライブラリを使用すると、VJsonDateTime ではなく、dateTimeUriLiteral 形式が表示されます。さらに、逆シリアル化は dateTimeUriLiteral 形式のみを受け入れます。これは、仕様と実装の間の競合のように見えます。
また、dateTimeUriLiteral はタイム ゾーン オフセットを考慮しません (ISO 8601 形式の場合など)。ただし、シリアル化された日時オブジェクトが DateTimeKind.Utc として指定されている場合、ライブラリは「Z」終端文字 (UTC の場合は ISO 8601) を発行することがわかります。これも、仕様と実装の間の競合のように見えます。
また、ライブラリを使用して、末尾が「Z」である dateTimeUriLiteral を逆シリアル化すると、逆シリアル化されたオブジェクトは DateTimeKind.Local としてマークされます。UTC 指定子の WRT サポートに仕様上の問題があるかどうかに関係なく、これは正しくないように見えます。「Z」が原因でデシリアライゼーションが失敗するか、UTC (ローカルではない) としてマークされた時刻になる必要があります。