2014-02-18 4 views
1

У меня есть модель, представляющая документ mongo с полем даты.странное поведение поля даты

class model 
{ 
    ... 

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

    ... 
} 

Я знаю, что Mongo хранит значения в момент времени UTC, поэтому я использую BsonDateTimeOptions атрибут автоматически представлять их по местному времени.

Когда я создаю экземпляр модели и сохраняю ее в mongo, она работает так, как ожидалось. Но, когда я получаю данные от внешнего источника (клиент к моей службе) и desirializing к моей модели, он сохраняет местное время.

Компилятор отображает те же значения для двух разных экземпляров (перед их вставкой на mongo), но в db первый хранится в формате UTC, а второй - по местному времени.

+0

Посмотрите на свойство «Тип» каждого значения перед его вставкой. –

+0

Я только что проверил. Первый объект имеет «Kind = Unspecified» и десериализованный «Kind = Local». – Schaliasos

+0

Не уверен, что вы подразумеваете под «первым» и «десериализованным» здесь, но это будет корень проблемы. Выясните, что означает «неуказанная» версия ... –

ответ

0

Я считаю, что перед сохранением, вам нужно назначить Kind для ваших проанализированных данных json, будь то локальный или Utc. Это скажет драйверу mongo, что он представляет, чтобы до его сохранения некорректно преобразовать в другой формат.

someDate = DateTime.SpecifyKind(someDate, DateTimeKind.Utc) 
Смежные вопросы