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

Como salvar a data corretamente?


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);