簡體   English   中英

從C#正確插入DateTime到mongodb

[英]Correct insert DateTime from c# to mongodb

我嘗試在MongoDB中插入本地時間

var time = DateTime.Now; // 03.05.2014 18:30:30

var query = new QueryDocument
{
   { "time", nowTime}
};

collection3.Insert(query);

但是在數據庫中,我看到了ISODate("2014-05-03T15:30:30.170Z")
必須為ISODate("2014-05-03T18:30:30.300Z")
請幫我!

我認為您對時區感到困惑。 字符串末尾的Z表示它位於UTC中。 當您發布此問題時,它是在世界標准時間15:30之后。

我強烈懷疑正在記錄正確的時間-但它被記錄為不參考特定時區的時間。 然后,您可以轉換為以后想要的任何時區,但是記錄UTC時間幾乎總是正確的方法。

UtcNow ,您可以先使用UtcNow使其更清晰。 這樣一來,您顯然不會嘗試獲取“本地”時間。

查看MongoDB文檔,似乎內部表示僅是自Unix紀元以來的毫秒數,因此,同樣,它不表示時區或UTC與本地時間之間的偏移量。 如果您想存儲一個可以轉換為記錄時所看到的本地時間的值(即使您現在處於不同的時區),則應將時區ID和/或UTC偏移量存儲為單獨的值。 這並不是經常需要的,但這是一種選擇。

MongoDB驅動程序正在將您的DateTime轉換為UTC。

如果您不想打擾時區,可以將類型更改為UTC:

time = DateTime.SpecifyKind(time, DateTimeKind.Utc);

我不建議這樣做,因為數據庫將存儲“錯誤的”日期,但是它將顯示ISODate(“ 2014-05-03T18:30:30.170Z”)。

只需通過“ BsonDateTimeOptions”屬性定義DateTime的“種類”並將其設置為本地:

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}

它可以與:

    DateTime t = DateTime.Now;

    var update = Builders<BsonDocument>.Update
    .Set("key1", t.ToUniversalTime())
    .CurrentDate("key_updatetime");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM