[英]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.