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

Datetime 为什么RavenDB在没有UTC标记的情况下存储我的日期时间?,datetime,ravendb,asp.net-web-api,Datetime,Ravendb,Asp.net Web Api,我有一个C#对象,我正在保存到RavenRB(build 1.0.960),日期时间是通用的,但RavenDB将其存储为本地时间“time”:“2012-06-12T13:07:39.0000000” 然后,当我使用session.Query().Where()时。。。在宇宙时间里,我的物品不会被归还。。。因为比较结果显示12小时(Im UTC+1200)不正常 我做错了什么 [编辑] 好的,我知道问题出在哪里了。我正在将我的对象(JSON)发布到服务器,并以UTC格式发送(无时区偏移,“201

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

然后,当我使用session.Query().Where()时。。。在宇宙时间里,我的物品不会被归还。。。因为比较结果显示12小时(Im UTC+1200)不正常

我做错了什么

[编辑]

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

试图侵入Web API序列化是一件非常痛苦的事情。Raven能在保存之前通过将所有日期转换为UTC的魔旗来保存我吗? 在保存之前,我不想在服务器上逐个属性地查看我的对象,查找日期时间并将其转换为UTC。。。哎哟

建议

谢谢你,亚当, 检查Time.Kind属性,RavenDB应将UTC中的日期时间对象存储为:

"Time": "2012-06-12T13:07:39.0000000Z"
注意结尾的Z。

亚当, 检查Time.Kind属性,RavenDB应将UTC中的日期时间对象存储为:

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

请注意结尾的Z。

斯科特·汉斯曼(Scott Hanselman)已经详细阐述了疼痛。看来他们希望在最终发布之前纠正这个问题。与此同时,他指出了一种相对直接的方法,可以将serialiser替换为使用JSON.NET。

Scott Hanselman详细阐述了使用JSON的痛苦。看来他们希望在最终发布之前纠正这个问题。与此同时,他指出了一种相对直接的方法,即替换serialiser以使用JSON.NET。

这个问题已经通过将JSON.NET作为ASP.NET MVC 4 RC中的默认序列化程序而得到解决。 如下所示进行配置:

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

通过将Json.net作为ASP.net MVC 4 RC中的默认序列化程序,此问题已得到修复。 如下所示进行配置:

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

谢谢Ayende-我检查了你的建议,并修改了我的问题谢谢Ayende-我检查了你的建议,并修改了我的问题嗨-谢谢,是的,我非常熟悉JSON日期问题,因为Web API“生成”输出,但我的问题与Web API如何接受传入日期有关。我已经将序列化程序更改为使用Newtonsoft one,但是,正如您在公开代码中看到的那样,它不适用于IKeyValueModel类型,这是您在HTTP POST期间得到的。您好-谢谢,是的,我非常熟悉JSON日期问题,以及Web API“生成”输出,但我的问题与Web API如何接受传入日期有关。我已将序列化程序更改为使用Newtonsoft one,但是,正如您在公开代码中看到的那样,它不适用于IKeyValueModel类型,这是您在HTTP POST中得到的。我遇到了服务器时区的模拟问题。我假设您的“解决方案”是一个讨厌的黑客,您不想公开谈论?我知道我的是(-;好的,我升级到了ASP.NET MVC/WebAPI(RC)的最新版本周末。现在我可以将所有日期配置为在UTC
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling=Newtonsoft.Json.DateTimeZoneHandling.UTC;
中进行序列化和反序列化。一切都很好!我遇到了服务器时区的类似问题。我假设您的“解决方案”是你不想公开谈论的讨厌的黑客行为?我知道我的是(-;好的,我升级到了ASP.NET MVC/WebAPI(RC)的最新版本周末。现在我可以将所有日期配置为在UTC
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling=Newtonsoft.Json.DateTimeZoneHandling.UTC中进行序列化和反序列化;
一切正常!