driver c# por padrão (sem configurações extras) salvando datas locais como data utc no banco de dados (data - deslocamento de fuso horário), mas lendo de volta sem nenhuma ação (portanto, data utc).
Por causa disso, ao carregar datetime do banco de dados, você recebe diff em 2 horas (seu deslocamento de fuso horário). Existem duas abordagens para dizer ao driver mongodb c# converter datas utc para datas de fuso horário local durante a desserialização:
1.através dos atributos para um campo de data específico:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
2.através das configurações globais para todos os campos de data e hora (o padrão é
UtcInstance
):DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;
Depois de fazer #1 ou #2, você verá a data local.
Atualizar:
#2 está obsoleto na versão mais recente do driver, então use o código abaixo:
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));
Atualizar:
#2 mudou novamente:
BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);