gpt4 book ai didi

c# - 以前的日期被插入到 mongodb

转载 作者:可可西里 更新时间:2023-11-01 10:44:04 25 4
gpt4 key购买 nike

我有一个带有 DateTime 字段的类。

Class aClass 
{
[BsonId]
public int Id { get; set; }

[BsonElement("dateCreated")]
public DateTime DateCreated { get; set; }
}

但是当我通过 c# 驱动程序在 mongo 中插入带有日期的对象时,假设 DateCreated = new DateTime(2013, 12, 08) 插入了前一个日期。

> db.col.find();
{
"_id" : 1,
"dateCreated" : ISODate("2013-12-07T22:00:00Z")
}

我正在使用 MongoDb 2.2.6

最佳答案

MongoDB 将所有 DateTime 值存储为 UTC 时间 (BSON Date type is the UTC datetime)。这就是您在数据库中看到 UTC 时间的原因(您的本地时区与 UTC 时间有两个小时的偏移量)。如果您要保存 UTC 时间,它将按原样存储。检查:

DateCreated = new DateTime(2013, 12, 8, 0, 0, 0, DateTimeKind.Utc)

当您从数据库中读取这些值时,它们也将具有 UTC 时间(值将为 12/7/2013 22:00:00 如果您检查 Kind 属性,它将是 Utc)。但是您可以通过应用 BsonDateTimeOptions 属性要求 Mongo 将日期反序列化为您本地时区的日期:

[BsonElement("dateCreated")]
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime DateCreated { get; set; }

现在相同的日期将被反序列化为 Local,它的值为 12/8/2013 00:00:00。您可以通过设置默认序列化选项对所有 DateTime 值反序列化启用相同的行为:

DateTimeSerializationOptions.Defaults = 
DateTimeSerializationOptions.LocalInstance;

关于c# - 以前的日期被插入到 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20452308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com