दुर्भाग्य से इसके लिए कोई त्वरित सुधार नहीं है। किसी एप्लिकेशन का अंतर्राष्ट्रीयकरण बहुत पहले डिज़ाइन चर्चाओं का हिस्सा होना चाहिए, क्योंकि यह वास्तव में बहुत सारे विभिन्न क्षेत्रों के मूल में जाता है, जिसमें दिनांक / समय की तुलना और आउटपुट स्वरूपण शामिल हैं।
वैसे भी, डूइंग इट राइट के ट्रैक पर आने के लिए, समय क्षेत्र की जानकारी को समय के साथ संग्रहीत करना आवश्यक है । दूसरे शब्दों में, एहसास है कि दिनांक / समय 20130407 14:50
है व्यर्थ के बिना या तो (क) समय क्षेत्र की तत्कालीन यूटीसी ऑफसेट सहित (नोट 1) , या (ख) सुनिश्चित करना कि सभी तर्क को इन मूल्यों को पहले धर्मान्तरित डालने के लिए एक निश्चित तय ऑफसेट ( सबसे अधिक संभावना है 0)। या तो उन चीजों के बिना, दो दिए गए समय मान अतुलनीय हैं , और डेटा भ्रष्ट है । (उत्तरार्द्ध विधि आग से खेल रही है (नोट 2) , वैसे, ऐसा मत करो।)
SQL Server 2008+ में, आप datetimeoffset
डेटा प्रकार का उपयोग करके समय के साथ ऑफसेट को सीधे स्टोर कर सकते हैं । (पूर्णता के लिए, 2005 और उससे पहले, मैं तत्कालीन UTC ऑफसेट मान (मिनटों में) संग्रहीत करने के लिए एक दूसरा स्तंभ जोड़ूंगा।
यह डेस्कटॉप-प्रकार के अनुप्रयोग के लिए आसान बनाता है, क्योंकि इन प्लेटफार्मों में सामान्य रूप से किसी दिनांक / समय + समय क्षेत्र को स्थानीय समय में स्वचालित रूप से परिवर्तित करने और फिर उपयोगकर्ता के क्षेत्रीय सेटिंग्स के आधार पर आउटपुट के लिए प्रारूप करने के लिए तंत्र होता है।
वेब के लिए, जो स्वाभाविक रूप से डिस्कनेक्टेड आर्किटेक्चर है, यहां तक कि बैक-एंड डेटा ठीक से सेट होने के साथ, यह अधिक जटिल है क्योंकि आपको रूपांतरण और / या स्वरूपण करने में सक्षम होने के लिए क्लाइंट के बारे में जानकारी की आवश्यकता है। यह आमतौर पर उपयोगकर्ता वरीयता सेटिंग्स (आउटपुट से पहले एप्लिकेशन को कनवर्ट / स्वरूपित करता है) के माध्यम से किया जाता है, या बस सभी के लिए एक ही निश्चित प्रारूप और समय क्षेत्र ऑफसेट के साथ चीजें दिखा रहा है (जो कि स्टैक एक्सचेंज प्लेटफॉर्म वर्तमान में करता है)।
आप देख सकते हैं कि अगर बैक-एंड डेटा को ठीक से सेट नहीं किया गया है, तो बहुत जल्दी यह जटिल और हैक होने वाला है। मैं उन रास्तों में से किसी के नीचे जाने की सलाह नहीं दूंगा क्योंकि आप लाइन के नीचे और अधिक समस्याओं को समाप्त करेंगे।
नोट 1:
एक समय क्षेत्र की यूटीसी ऑफसेट तय नहीं है: दिन के उजाले की बचत पर विचार करें जहां एक जोन का यूटीसी ऑफसेट प्लस या माइनस एक घंटे से भिन्न होता है। इसके अलावा क्षेत्र की दिन की बचत की तारीखें नियमित रूप से बदलती रहती हैं। तो का उपयोग कर datetimeoffset
(या की एक समग्र local time
और UTC offset at that time
) अधिकतम जानकारी वसूली में परिणाम है।
नोट 2:
यह डेटा इनपुट को नियंत्रित करने के बारे में है। हालांकि आने वाले मूल्यों को मान्य करने के लिए कोई मूर्ख-प्रूफ तरीका नहीं है, एक साधारण मानक को लागू करना बेहतर है जिसमें संगणना शामिल नहीं है। यदि कोई सार्वजनिक API एक डेटा प्रकार की अपेक्षा करता है जिसमें ऑफ़सेट शामिल होता है, तो कॉल करने वाले के लिए यह आवश्यकता स्पष्ट हो जाएगी।
यदि ऐसा नहीं होता, तो कॉल करने वाले को दस्तावेज़ीकरण पर भरोसा करना पड़ता है (यदि वे इसे पढ़ते हैं), या गणना गलत तरीके से की जाती है, आदि विशेष रूप से वितरित सिस्टम के लिए ऑफसेट की आवश्यकता होने पर कम विफलता / बग मोड होते हैं; या यहां तक कि अलग-अलग सर्वरों पर सिर्फ वेब / डेटाबेस यहां केस के रूप में)।
ऑफसेट को संचित करना वैसे भी एक पत्थर से दो पक्षियों को मारता है; और यहां तक कि अगर अभी आवश्यक नहीं है , तो यह संभावना को बाद में यदि आवश्यक हो तो उपलब्ध कराता है। यह सच है कि यह अधिक भंडारण लेता है, लेकिन मुझे लगता है कि यह व्यापार-मूल्य के लायक है क्योंकि डेटा खो जाता है अगर यह पहली बार में कभी भी दर्ज नहीं किया जाता है।