2009-02-23 13 views
79

से टाइमज़ोन प्राप्त करें क्या नेट डेटटाइम में समय क्षेत्र के बारे में जानकारी है जहां इसे बनाया गया था?डेटटाइम

मेरे पास एक प्रारूप से डेटटाइम पार्सिंग है जो अंत में "+ zz" है, और जब यह सही ढंग से पार्स करता है और स्थानीय समय को समायोजित करता है, तो मुझे यह निर्धारित करना होगा कि विशिष्ट समय क्षेत्र डेटटाइम ऑब्जेक्ट से क्या था।

क्या यह संभव है? मैं देख सकता हूं कि डेटटाइम है। किंड, जो निर्दिष्ट करता है कि समय स्थानीय या यूटीसी है या नहीं।

उत्तर

112

डेटटाइम में कोई वास्तविक टाइमज़ोन जानकारी नहीं है। यह पता है कि यह यूटीसी या स्थानीय है, लेकिन स्थानीय वास्तव में क्या मतलब नहीं है।

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

.NET 3.5 के रूप में समय क्षेत्र के लिए समर्थन इसकी तुलना में काफी बेहतर है, लेकिन मैं वास्तव में एक मानक "ज़ोनडेटडेट टाइम" या ऐसा कुछ देखना चाहता हूं - एक यूटीसी समय और वास्तविक समय क्षेत्र। अपने आप को बनाना आसान है, लेकिन मानक पुस्तकालयों में इसे देखना अच्छा लगेगा।

संपादित करें: लगभग चार साल बाद, अब मैं Noda Time का उपयोग करने का सुझाव दूंगा जिसमें दिनांक/समय के प्रकार का एक समृद्ध सेट है। हालांकि, मैं नोडा टाइम के मुख्य लेखक के रूप में पक्षपातपूर्ण हूं :)

+2

कोडप्लेक्स पर पब्लिकडोमेन प्रोजेक्ट यह आपके लिए करता है। – Cheeso

+0

बीसीएल में एक टाइमज़ोन एनम अच्छा होगा अगर विश्व समय क्षेत्र स्थिर हैं और नहीं बदलते हैं। – jlafay

+1

@jlafay: हालांकि, वे बदलते हैं - उदाहरण के लिए, पिछले साल विंडोज़ में अधिक समय क्षेत्र जोड़े गए थे। –

29

सं

डेवलपर कुछ बाहरी तंत्र के माध्यम से दिनांक समय मूल्य के साथ जुड़े समय-क्षेत्र की जानकारी का ट्रैक रखने के लिए जिम्मेदार है।

उत्कृष्ट लेख here से एक उद्धरण। ए को प्रत्येक .NET डेवलपर के लिए पढ़ना चाहिए।

तो मेरी सलाह है कि आपकी जरूरतों के अनुरूप थोड़ा रैपर वर्ग लिखना है।

5

public domain TimeZone library for .NET है। वास्तव में उपयोगी। यह आपकी जरूरतों का उत्तर देगा।

सामान्य-केस टाइमज़ोन समस्या को हल करना आपके विचार से कठिन है।

2

आप इस्तेमाल कर सकते हैं TimeZoneInfo वर्ग

समयक्षेत्र वर्ग स्थानीय समय क्षेत्र पहचानता है, और समन्वित यूनिवर्सल समय (UTC) और स्थानीय समय के बीच कई बार बदल सकते हैं। एक टाइमज़ोनइन्फो ऑब्जेक्ट किसी भी समय क्षेत्र का प्रतिनिधित्व कर सकता है, और टाइमज़ोनइन्फो क्लास के तरीकों का उपयोग किसी भी समय क्षेत्र में किसी भी समय क्षेत्र में किसी भी समय क्षेत्र में परिवर्तित करने के लिए किया जा सकता है।

  1. एक समय क्षेत्र है कि पहले से ही ऑपरेटिंग प्रणाली द्वारा परिभाषित किया गया प्राप्त कर रहा है: TimeZoneInfo वर्ग के सदस्य निम्नलिखित कार्यों का समर्थन है।

  2. सिस्टम पर उपलब्ध समय क्षेत्र का आकलन करना।

  3. विभिन्न समय क्षेत्रों के बीच कनवर्टिंग समय।

  4. एक नया समय क्षेत्र बनाना जो पहले से ही ऑपरेटिंग सिस्टम द्वारा परिभाषित नहीं है।

    बाद में पुनर्प्राप्ति के लिए समय क्षेत्र को क्रमबद्ध करना।

+1

... लेकिन, डेटटाइम दिया गया है, अभी भी उपयोग करने का कोई तरीका नहीं है TimeZoneInfo, मेरे ज्ञान के लिए डेटटाइम का टाइमज़ोन निर्धारित करने के लिए। –

+1

हाँ जॉन स्कीट इसके बारे में सही है – Shekhar

संबंधित मुद्दे