सी # ड्राइवर डिफ़ॉल्ट रूप से (अतिरिक्त सेटिंग्स के बिना) स्थानीय तिथियों को डेटाबेस में यूटीसी तिथि के रूप में सहेज रहा है (दिनांक - समय क्षेत्र ऑफसेट) लेकिन बिना किसी कार्रवाई के वापस पढ़ना (इसलिए, यूटीसी तिथि)।
इस वजह से जब आप डेटाबेस से डेटाटाइम लोड करते हैं तो आपको 2 घंटे में अंतर मिलता है (आपका टाइमज़ोन ऑफ़सेट)। दो दृष्टिकोण हैं कि कैसे मोंगोडब सी # ड्राइवर को यूटीसी तिथियों को डिसेरिएलाइजेशन के दौरान स्थानीय टाइमज़ोन तिथियों में परिवर्तित करें:
1.विशेष दिनांक फ़ील्ड के लिए विशेषताओं के माध्यम से:
[BsonDateTimeOptions(Kind = DateTimeKind.Local)]
public DateTime SomeDateProperty {get;set;}
2. सभी डेटाटाइम फ़ील्ड के लिए वैश्विक सेटिंग्स के माध्यम से (डिफ़ॉल्ट UtcInstance
. है ):
DateTimeSerializationOptions.Defaults = DateTimeSerializationOptions.LocalInstance;
एक बार जब आप #1 या #2 कर लेंगे तो आपको स्थानीय तिथि दिखाई देगी।
अपडेट करें:
#2 नवीनतम ड्राइवर संस्करण में अप्रचलित है इसलिए इसके बजाय नीचे दिए गए कोड का उपयोग करें:
BsonSerializer.RegisterSerializer(typeof(DateTime),
new DateTimeSerializer(DateTimeSerializationOptions.LocalInstance));
अपडेट करें:
#2 फिर से बदल गया है:
BsonSerializer.RegisterSerializer(typeof(DateTime), DateTimeSerializer.LocalInstance);