日期字段奇怪的行为

问题描述:

我有一个模型,用一个日期字段表示一个mongo文档。日期字段奇怪的行为

class model 
{ 
    ... 

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

    ... 
} 

我知道蒙戈店在UTC时间值,所以我用BsonDateTimeOptions属性在当地时间自动代表他们。

当我创建模型的实例并将其存储到mongo时,它按预期工作。但是,当我从外部数据源(客户端到我的服务)接收数据并将其删除到我的模型时,它会存储当地时间。

编译器为2个不同的实例显示相同的值(在将它们插入到mongo之前),但在db中,第一个存储在UTC,第二个存储在本地时间。

+0

在插入它之前,请查看每个值的'Kind'属性。 –

+0

我刚刚检查过它。第一个对象具有'Kind = Unspecified'和反序列化的'Kind = Local'。 – Schaliasos

+0

不确定这里“先”和“反序列化”是什么意思,但这将是问题的根源。找出“未指定”版本的真正含义...... –

我相信你需要在保存之前为你的json解析数据分配一个Kind,无论是本地还是Utc。这将告诉mongo驱动程序它代表什么,以便它在保存之前不会错误地转换为另一种格式。

someDate = DateTime.SpecifyKind(someDate, DateTimeKind.Utc)