从c#到mongodb正确插入DateTime

我尝试在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。 当您发布此问题时,它刚好在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的“Kind”并将其设置为local:

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

它可以用于:

  DateTime t = DateTime.Now; var update = Builders.Update .Set("key1", t.ToUniversalTime()) .CurrentDate("key_updatetime");