आप डीबी में पहली जगह यूटीसी क्यों नहीं जमा कर रहे हैं? ज्यादातर मामलों में, DateTime
यूटीसी में संग्रहित किया जाना चाहिए, क्योंकि यह आमतौर पर एक बिंदु को संदर्भित करता है। यह किसी भी चीज़ के लिए सच है जो भौतिक अर्थों में समय को संदर्भित करता है, और जो कुछ भी मानता है कि समय एकरस, बढ़ता और अद्वितीय है, इनमें से कोई भी अधिकांश स्थानीय समय के लिए सत्य नहीं है।
कभी-कभी, स्थानीय समय का उपयोग करना समझ में आता है:मान लीजिए कि हर दिन सुबह 9 बजे एक बस निकलती है। इसका मतलब है कि लगातार दो घटनाओं के बीच 24 घंटे गुजरते हैं। हालांकि, यदि समय क्षेत्र में डीएसटी है, तो यह वर्ष में एक बार क्रमशः 23 घंटे, 25 घंटे का अंतराल होगा।
हालांकि, यदि आपको इस प्रकार के डेटा में फेरबदल करने की आवश्यकता है, तो एक साधारण DateTime
चाल नहीं चलता; DST नियम बदल सकते हैं, समय क्षेत्र बदल सकते हैं, आदि। C# में, जो DST नियम लागू होंगे, वे वर्तमान में हैं। मान्य है, भले ही तारीख 'ऐतिहासिक' हो। ऐतिहासिक तिथियों के साथ तिथि अंकगणित इस प्रकार कहर बरपा सकता है। अगर आपको वास्तव में इससे निपटने की ज़रूरत है, तो कम से कम, आपको जो . स्टोर करना चाहिए समय क्षेत्र में समय है (न केवल ऑफ़सेट, या यहां तक कि केवल एक isLocal
झंडा)।
डेटाबेस में पाठ्य जानकारी संग्रहीत करना जिसे बाइनरी संग्रहीत किया जा सकता है, मेरे लिए बहुत ही सुरुचिपूर्ण नहीं लगता है, न ही कुछ मध्य परत में मान बदलता है। पहला अक्षम है और स्थानीय समय की पहले बताई गई विशिष्टताओं से ग्रस्त है, बाद वाले के पास केवल दूसरी समस्या है।
BTW, बाद वाले को पूरा करने के लिए, आप संपत्ति को [BsonDateTimeOptions(Kind=DateTimeKind.Local)]
से सजा सकते हैं , जो आपके लिए रूपांतरण करेगा, लेकिन निश्चित रूप से उन्हीं समस्याओं से ग्रस्त है।