2012-06-12 29 views
2

我有我保存到RavenRB(建1.0.960)一個C#對象,日期時間是普遍的 - 但RavenDB其存儲爲本地時間"Time": "2012-06-12T13:07:39.0000000"爲什麼RavenDB存儲沒有UTC標記的DateTime?

然後,當我使用session.Query()在哪裏。 ()...並在世界時間傳遞,我的對象不會返回...因爲比較它12小時(Im UTC + 1200)出錯。

我在做什麼錯?

[編輯]

好的 - 我看到了什麼問題。我將我的對象(JSON)發佈到服務器,並以UTC格式(無時區偏移量,「2012-06-12T13:07:39.00Z」)發送 - 我天真地期望Asp.net Web API將它反序列化爲UTC類型的對象 - 就像它發送的一樣 - 但不是。它被DESERIALIZED到本地服務器時間。這意味着當我將對象保存到Raven時,Raven會將其存儲爲本地時間(不含Z標識符)。哎呀!我希望我的所有日​​期都以UTC存儲在數據庫中(按照最佳實踐)!

試圖侵入Web API序列化是一個真正的痛苦。 Can Raven可以通過一些魔術標誌來保存我,這些標誌將在保存之前將所有日期轉換爲UTC? 我不想要在服務器上反射我的對象,按屬性查找DateTimes,並將它們轉換爲UTC,然後保存... EEEW!

對此提出建議?

感謝

+0

我已經打了一個與服務器時區類似的疑難雜症。 –

+0

我假設你的'解決方案'是一個討厭的黑客,你不想公開談論它?我知道我的是( - ; – Adam

+0

)好的,我在週末升級到了最新版本的ASP.NET MVC/WebAPI(RC),現在我可以配置所有的日期,以便序列化到UTC 'GlobalConfiguration。配置.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc;' 所有好! – Adam

回答

3

通過將Json.net作爲ASP.NET MVC 4 RC中的默認序列化程序包含此問題已得到修復。 像這樣配置:

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

亞當, 檢查Time.Kind財產,RavenDB應該在UTC存儲日期時間對象:

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

注意到底在Z。

+0

謝謝艾恩德 - 我檢查了你的建議,並修改了我的問題 – Adam

0

Scott Hanselman對JSON dates in ASP.NET Web Api的疼痛作了詳細的闡述。看來他們希望在最終發佈前糾正這個問題。與此同時,他指出了一個相對簡單的方法來換出serialiser以使用JSON.NET here

+0

嗨,謝謝,是的,我很熟悉儘管Web API'生成'輸出的JSON日期問題,但是我的問題與Web API接受傳入日期的方式有關,但我已經將序列化程序更改爲使用Newtonsoft,但是,您可以在公共代碼中看到爲此,它不適用於IKeyValueModel類型,這是您在HTTP POST期間獲得的。 – Adam

相關問題