MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Driver Mongodb c# e ISODate


Na maioria dos casos, você deseja armazenar datas UTC no banco de dados para que seu DateTime seja construído como:-
DateTest = new DateTime(2013, 10, 13, 0, 0, 0, DateTimeKind.Utc) //this is the date

Com isso, o primeiro de seus testes de unidade comentados agora passa.

Sem especificar o DateTimeKind você está deixando isso ao acaso. O MongoDB parece assumir que é local e o converte para UTC no banco de dados.

Observe também que os valores DateTime do MongoDB têm menos precisão do que os valores DateTime do .NET. Se você deseja armazenar valores de DateTime arbitrários e recuperá-los de forma que ainda correspondam, será necessário arredondar para o milissegundo mais próximo antes de armazená-los.

Se você realmente deseja armazenar os horários locais, recomendo que você mude de DateTime para DateTimeOffset e serialize-o como um valor de Tick longo para o UTC DateTime e um valor para o deslocamento.

Observe que, a menos que você armazene o deslocamento calculado no momento em que o valor DateTime foi obtido, os métodos .NET para converter em LocalTime são essencialmente inúteis, pois eles não sabem quando o horário de verão começou, nem sabem em qual zona o valor DateTime vem a partir de. Em geral, o tratamento de DateTime do .NET deixa muito a desejar e contém muitos métodos enganosos que alegam ajudar, mas na verdade não ajudam.