डेटाबेस में TimeZones को बचाने के लिए सबसे अच्छा अभ्यास क्या है?


13

हम डेटाबेस में अपने प्रत्येक पते के लिए टाइमज़ोन इकट्ठा करना शुरू करना चाहते हैं। टाइमज़ोन को स्टोर करने के लिए सबसे अच्छा अभ्यास क्या है? आप मौजूदा पता रिकॉर्ड के लिए टाइमज़ोन प्राप्त करने के बारे में कैसे जाएंगे?

मैं Microsoft SQL सर्वर, .net mvc, C # का उपयोग कर रहा हूं। किसी भी सुझाव के लिए बहुत आभार होगा।



Btw एक सामान्य समय क्षेत्र gotcha एक int का उपयोग करने के लिए है, लेकिन कुछ समय क्षेत्र + या - 30 मिनट, या 15 मिनट भी हो सकते हैं :) ओह और याद रखें कि यह एक सटीक विज्ञान नहीं है, दिन के उजाले की बचत और इस तरह से आप फेंक सकते हैं।
रॉकलन

2
@LachlanB इसे लगाने का एक तरीका यह है कि समय क्षेत्र एक स्थान से अधिक समय ऑफसेट है । लेकिन यहां तक ​​कि यह दृश्य अपने आप में पर्याप्त नहीं है, उदाहरण के लिए रूस ने हाल ही में दिन के उजाले की बचत के बारे में अपनी नीति को बदल दिया है, जिसका अर्थ है कि आपको वास्तविक तारीख के आधार पर इसे अलग तरह से व्यवहार करना होगा।
डैनियल बी

जवाबों:


7

आप कुछ ऐसा संग्रह करना चाहते हैं जो हर समय (या वर्ष में दो बार) परिवर्तित न हो। समय क्षेत्र डेटाबेस https://en.wikipedia.org/wiki/List_of_tz_database_time_zones बिल्कुल सही बात है। इसलिए आप सिर्फ दो अक्षर स्टोर करें।

इस डेटाबेस से आप समय की भरपाई कर सकते हैं, और दिन के उजाले की बचत का समय सक्रिय है। यह केवल समय की भरपाई नहीं है, यह आपको एक क्षेत्र भी देता है, इसलिए एक ही अक्षांश पर कई स्थानों पर अलग-अलग कोड होंगे और व्यक्तिगत रूप से अपने समय क्षेत्र के नियमों को बदल सकते हैं, और आपका सॉफ्टवेयर इसे संभाल सकेगा।

एकमात्र समय जब आपको अपने डेटाबेस में परिवर्तन करने की आवश्यकता होती है, जब कोई स्थान बदलता है जो समयक्षेत्र से संबंधित होता है, जो बहुत दुर्लभ होगा।


ध्यान दें कि विकिपीडिया पर दी गई सूची में सभी IANA टाइम ज़ोन के लिए 2-कैरेक्टर संक्षिप्तीकरण नहीं हैं - प्लस मैपिंग असंदिग्ध नहीं है। यदि आपको पूर्ण ऐतिहासिक जानकारी की आवश्यकता है, तो इसके बजाय पूर्ण नामों के लिए जाएं।
हल्क

2
विकिपीडिया पृष्ठ पर मेरे द्वारा देखे गए केवल दो अक्षर कोड देश कोड हैं। ये विशिष्ट रूप से टाइमज़ोन को परिभाषित नहीं करते हैं। उदाहरण के लिए, यूएस के सभी टाइमज़ोन में एक ही दो अक्षर देश कोड होते हैं: US। इसी तरह, पूरे ऑस्ट्रेलिया में देश कोड AU है।
इयान

3

पूर्ण सर्वोत्तम अभ्यास एक डेटाबेस का उपयोग करना होगा TIMESTAMP WITH TIMEZONEजो SQL99 द्वारा परिभाषित डेटा प्रकार का समर्थन करता है ।

SQL Server में एक प्रकार datetimeoffsetहोता है, TIMESTAMP WITH TIMEZONEजो वास्तविक समय क्षेत्र को स्टोर करने के अलावा सब कुछ करता है । आप बस यूटीसी (जैसे 2013-05-04 12:34:56 -5:00) से एक ऑफसेट स्टोर कर सकते हैं , जिसका अर्थ है कि आपको यह निर्धारित करना होगा कि समय क्षेत्र के आधार पर भंडारण से पहले।


3

मान लें कि आप .Net फ्रेमवर्क 4.0 या उच्चतर का उपयोग कर रहे हैं, TimeZoneInfo को आपकी आवश्यकता है।

डेटाबेस में सभी दिनांक मानों को UTC प्रारूप में संग्रहीत करें। प्रदर्शन के लिए स्थानीय प्रारूप में संग्रहीत तिथियों को परिवर्तित करने के लिए प्रत्येक क्लाइंट के लिए TimeSoneInfo ऑब्जेक्ट बनाने के लिए ID मान या ToSerializedString () के परिणाम का उपयोग करें।


2

आपने कहा है कि आप अपने DB में प्रत्येक पते के लिए एक समय क्षेत्र संग्रहीत करना चाहते हैं, लेकिन आपने यह नहीं कहा है कि आप इसके साथ क्या करना चाहते हैं। एक DB में कुछ संग्रहीत करना अपने आप में शायद ही कभी खत्म होता है।

किसी भी स्थिति में मैं टीबी डेटाबेस , उर्फ ​​ऑलसेन डेटाबेस का उपयोग करना चाहूंगा , या तो सीधे या शेल्फ सॉफ़्टवेयर से कुछ का उपयोग करके जो कि टीबी को एकीकृत करता है। आप किसी टीबी डीबी प्रविष्टियों , जैसे 'अफ्रीका / कंपाला' या 'यूरोप / पेरिस' में से एक को संदर्भित करने के लिए एक टाइमज़ोन को एक स्ट्रिंग के रूप में स्टोर कर सकते हैं ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.