【MongoDB】MongoDB 取出的時間與儲存的時間不一致

MongoDB 取出的時間與儲存的時間不一致
系統環境:Windows 10、Visual Studio 2017、MongoDB 

內容摘要
因為某種需要,所以把一個物件上傳到MongoDB儲存。後來將物件取出來的時候,突然發現物件裡面所包含的時間屬性的值好像不太正確。觀察了一下之後發現,取出來得到的時間怎麼比儲存進去的時間少了八個小時。這個時候突然靈光一閃!兇手只有一個....不是啦,差了八個小時這個數字不就正好跟倫敦格林威治標準時間差的一樣嗎?

發生原因
因為MongoDB沒有時區的概念,他儲存的時候一律會使用UTC來儲存時間,而程式在沒有特別設定的情況下,會導致程式在讀取MongoDB的時間資料時,會產生時間差。

解決辦法
所以在程式中,建構MongoDB的建構子中,加入一個 DateTimeSerializer,就可以讓讀出來的時間符合LocalTime。

var serializer = new DateTimeSerializer(DateTimeKind.Local, BsonType.DateTime);
BsonSerializer.RegisterSerializer(typeof(DateTime), serializer);

經過測試之後證實:MongoDB一律會儲存UTC,而這個變更的差別在於,因為註冊了一個Serializer,使得MongoDB在讀取並序列化資料的時候,可以依照Serializer的設定去將時間轉換成Local 的DateTime。

相關連結
https://hk.saowen.com/a/082f7d8c4d66ee5429b1476cf41427f247b2ce16b712e8e8e464e2b27a975970
https://stackoverflow.com/questions/16185262/what-is-new-way-of-setting-datetimeserializationoptions-defaults-in-mongodb-c-sh