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