繁体   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