Controlador Mongodb c# e ISODate

Controlador Mongodb c# e ISODate

En la mayoría de los casos, desea almacenar las horas de la fecha UTC en la base de datos, por lo que su fecha y hora debe construirse como:-

DateTest = new DateTime(2013, 10, 13, 0, 0, 0, DateTimeKind.Utc) //this is the date

Con esto, la primera de sus pruebas unitarias comentadas ahora pasa.

Sin especificar el DateTimeKind lo estás dejando al azar. MongoDB parece asumir que es local y lo convierte a UTC en la base de datos.

Tenga en cuenta también que los valores de fecha y hora de MongoDB tienen menos precisión que los valores de fecha y hora de .NET. Si desea almacenar valores de fecha y hora arbitrarios y recuperarlos de tal manera que aún coincidan, deberá redondearlos al milisegundo más cercano antes de almacenarlos.

Si realmente desea almacenar las horas locales, le recomiendo que cambie de DateTime a DateTimeOffset y serialícelo como un valor de Tick largo para el UTC DateTime y un valor para el desplazamiento.

Tenga en cuenta que, a menos que almacene el desplazamiento calculado en el momento en que se obtuvo el valor DateTime, los métodos .NET para convertir a LocalTime son esencialmente inútiles, ya que no saben cuándo comenzó el horario de verano, ni siquiera saben en qué zona se encuentra el valor DateTime. de. En general, el manejo de .NET DateTime deja mucho que desear y contiene muchos métodos engañosos que pretenden ayudar pero en realidad no lo hacen.


También puede hacer esto en su modelo. clase pública TestEntity

{
    public string Id { get; set; }

    public string StringTest { get; set; }

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