为什么 RavenDB 在没有 UTC 标记的情况下存储我的日期时间



我有一个C#对象,我正在保存到RavenRB(build 1.0.960),DateTime是通用的 - 但RavenDB将其存储为本地时间"Time": "2012-06-12T13:07:39.0000000"

然后,当我使用会话时。查询()。其中()...并且在宇宙时间中过去,我的对象没有返回...因为比较它 12 小时 (Im UTC+1200) 失常。

我做错了什么??

[编辑]

好的 - 我知道问题是什么。我正在将我的对象 (JSON) 发布到服务器,并以 UTC 格式(无时区偏移量,"2012-06-12T13:07:39.00Z")发送它 - 我天真地期望 Web API Asp.net 将其反序列化为 UTC 类型的对象 - 就像它被发送一样 - 但不是。它被反序列化为本地服务器时间。这意味着当我将对象保存到 Raven 时,Raven 将其存储为本地时间(没有 Z 标识符)。啊!我希望我的所有日期都以 UTC 格式存储在数据库中(根据最佳实践)!

试图入侵 Web API 序列化是一个真正的痛苦。Raven 可以通过一些魔法标志来拯救我,该标志会在保存之前将所有日期转换为 UTC?我不想在保存之前逐个属性地反映我在服务器上的对象,查找 DateTimes,并将它们转换为 UTC......哗啦啦!

建议?

谢谢

此问题

已通过在 MVC 4 RC 中包含 Json.net 作为默认序列化程序 ASP.NET 得到解决。像这样配置它:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.D‌​ateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc; 

Adam,检查 Time.Kind 属性,RavenDB 应将 UTC 格式的日期时间对象存储为:

"Time": "2012-06-12T13:07:39.0000000Z"

注意最后的 Z。

Scott Hanselman详细阐述了 ASP.NET Web API中JSON日期的痛苦。看来他们希望在最终发布之前纠正这个问题。同时,他指出了一种相对直接的方法来交换序列化器以在此处使用 JSON.NET。

相关内容

最新更新