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

Problemas de data e hora com Mongo e C #


O motivo é que o formato BSON DateTime armazena valores com menos precisão do que um valor .NET DateTime, portanto, quando você o lê de volta no banco de dados, o valor foi truncado.

Se seu valor DateTime for uma propriedade de uma classe C# que você está serializando, você pode pedir ao serializador para serializar o valor DateTime como um documento incorporado contendo o valor BSON DateTime (truncado) e o valor .NET DateTime original (armazenado como Ticks). Nesse caso, o valor não será truncado quando desserializado.

Por exemplo:
public class MyClass {
    public ObjectId Id;
    [BsonRepresentation(BsonType.Document)]
    public DateTime MyDateTime;
}

Você também pode usar um BsonRepresentation de Int64 ou String e não perder a precisão, mas então o documento armazenado somente tem Ticks ou uma representação de string e nenhum BSON DateTime, o que dificulta a realização de consultas relacionadas a DateTime.

Você também deve ter em mente que os valores DateTime são armazenados em UTC no banco de dados. A melhor prática é sempre usar valores UTC para armazenamento e usar apenas horários locais ao exibi-los ao usuário.