MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie speichere ich das Datum richtig?

C#-Treiber speichert standardmäßig (ohne zusätzliche Einstellungen) lokale Daten als UTC-Datum in der Datenbank (Datum - Zeitzonen-Offset), liest aber ohne Aktion zurück (also UTC-Datum).

Aus diesem Grund erhalten Sie beim Laden von datetime aus der Datenbank einen Unterschied in 2 Stunden (Ihr Zeitzonen-Offset). Es gibt zwei Ansätze, wie man sagen kann, dass der c#-Treiber von mongodb UTC-Daten während der Deserialisierung in Daten der lokalen Zeitzone konvertiert:

1.durch die Attribute für bestimmte Datumsfelder:

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

2.durch globale Einstellungen für alle datetime-Felder (Standard ist UtcInstance ):

DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;

Sobald Sie #1 oder #2 gemacht haben, sehen Sie das lokale Datum.

Aktualisieren:

#2 ist in der neuesten Treiberversion veraltet, verwenden Sie stattdessen den folgenden Code:

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

Aktualisieren:

#2 hat sich wieder geändert:

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