Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.2k views
in Technique[技术] by (71.8m points)

mongodb - How to save date properly?

I'm trying to save date (using C# official driver):

val = DateTime.Parse(value).Date; //Here date is {11/11/2011 12:00:00 AM}
var update = Update.Set("Date", val);
...

When I select Date from the database, the value is {11/10/2011 10:00:00 PM}

How to save only the date I want?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

c# driver by default (without extra settings) saving local dates as utc date into database (date - time zone offset) but reading back without any action (so, utc date).

Because of this when you loading datetime from database you receive diff in 2 hours (your timezone offset). There are two approaches how to say to mongodb c# driver convert utc dates to local timezone dates during deserialization:

1.through the attributes for particular date field:

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

2.through global settings for all datetime fields (default is UtcInstance):

DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;

Once you will do #1 or #2 you will see local date.

Update:


#2 is obsolete in latest driver version so use code below instead:

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

Update:


#2 has changed again:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...