sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo guardar la fecha correctamente?

El controlador c# de forma predeterminada (sin configuraciones adicionales) guarda las fechas locales como fecha utc en la base de datos (fecha - compensación de zona horaria) pero vuelve a leer sin ninguna acción (por lo tanto, fecha utc).

Debido a esto, cuando carga la fecha y hora de la base de datos, recibe la diferencia en 2 horas (su compensación de zona horaria). Hay dos enfoques sobre cómo decirle al controlador mongodb c# que convierta las fechas utc en fechas de la zona horaria local durante la deserialización:

1.a través de los atributos para un campo de fecha en particular:

[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}

2. a través de la configuración global para todos los campos de fecha y hora (el valor predeterminado es UtcInstance ):

DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;

Una vez que haga el n.° 1 o el n.° 2, verá la fecha local.

Actualización:

#2 está obsoleto en la última versión del controlador, así que use el siguiente código en su lugar:

BsonSerializer.RegisterSerializer(typeof(DateTime), 
             new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));

Actualización:

#2 ha vuelto a cambiar:

BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);