我尝试在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")
。
请帮帮我!
答案 0 :(得分:10)
我认为你对时区感到困惑。字符串末尾的Z
表示它在UTC中。当你发布这个问题时,它就在15:30 UTC之后。
我强烈怀疑正在记录正确的时间 - 但它是在没有参考特定时区的情况下及时记录的。然后,您可以将转换到以后想要的任何时区,但记录UTC时间几乎总是正确的方法。
顺便说一句,您可以使用UtcNow
开始更清楚。这样一来,你就不会想要获得一个本地的"时间。
查看MongoDB文档,似乎内部表示只是自Unix时代以来的毫秒数 - 所以再次没有时区或UTC与本地时间之间的偏移。如果您想存储一个值,该值可以转换回您在录制时看到的当地时间(即使您现在 > 在不同的时区),您应该存储一个时区ID和/或UTC偏移量作为单独的值。这不是经常需要的,但它是一种选择。
答案 1 :(得分:7)
MongoDB驱动程序正在将DateTime转换为UTC。
如果您不想打扰时区,可以将类型更改为UTC:
time = DateTime.SpecifyKind(time, DateTimeKind.Utc);
我不建议这样做,因为数据库会存储错误的"日期,但它会显示ISODate(" 2014-05-03T18:30:30.170Z")。
答案 2 :(得分:4)
只需通过“BsonDateTimeOptions”属性定义DateTime的“Kind”并将其设置为local:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
答案 3 :(得分:2)
它可以用于:
DateTime t = DateTime.Now;
var update = Builders<BsonDocument>.Update
.Set("key1", t.ToUniversalTime())
.CurrentDate("key_updatetime");