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