sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan gemmer man dato korrekt?

c# driver som standard (uden ekstra indstillinger) gemmer lokale datoer som utc-dato i databasen (dato - tidszoneforskydning), men læser tilbage uden nogen handling (altså utc-dato).

På grund af dette, når du indlæser datetime fra databasen, modtager du diff om 2 timer (din tidszone offset). Der er to tilgange til, hvordan man siger til mongodb c#-driveren konverterer utc-datoer til lokale tidszonedatoer under deserialisering:

1.gennem attributterne for et bestemt datofelt:

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

2.gennem globale indstillinger for alle datetime-felter (standard er UtcInstance ):

DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;

Når du har gjort #1 eller #2, vil du se lokal dato.

Opdatering:

#2 er forældet i seneste driverversion, så brug koden nedenfor i stedet:

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

Opdatering:

#2 har ændret sig igen:

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


  1. Er der en måde at begrænse antallet af poster i en bestemt samling

  2. Vælg poster, der matcher den sammensatte værdi af to felter i mongodb

  3. MongoDB resultatsæt for Aggregate()

  4. Sådan adskilles redis-database for samme to app i node.js