2010-08-10 15 views
12

कुछ हद तक भ्रामक शीर्षक, मुझे पता है। वास्तव में कभी भी TimeZoneInfo ऑब्जेक्ट को स्टोर नहीं करना चाहता था: बल्कि, मैं कुछ संस्कृति-तटस्थ पहचानकर्ता को स्टोर करना चाहता हूं, जिसे बाद में TimeZoneInfo के उदाहरण को पुनर्निर्माण के लिए उपयोग किया जा सकता है।डेटाबेस में TimeZoneInfo ऑब्जेक्ट्स को कैसे स्टोर करें?

वर्तमान में, मैं TimeZoneInfo.Id संपत्ति का मूल्य संग्रहीत कर रहा हूं और यह विंडोज़ के अंग्रेजी और रूसी संस्करणों दोनों पर ठीक लगता है, लेकिन मैं बस यह सुनिश्चित करना चाहता था कि मैं सही काम करता हूं।

+0

सुनिश्चित नहीं है लेकिन यह जांचें आपकी मदद कर सकता है: http://blog.sqlauthority.com/2010/07/15/sql-server-datetime-function-switchoffset-example/ –

+0

संबंधित प्रश्न - http: // stackoverflow। कॉम/प्रश्न/253272 9/डेलाइट-सेविंग-टाइम-एंड-टाइमज़ोन-बेस्ट प्रैक्टिस – Oded

उत्तर

16

हां, Id एक गैर-स्थानीय पहचानकर्ता है, इसलिए स्टोर करने के लिए यह एक उचित बात है।

आपको एक संभावित समस्या से अवगत होना चाहिए हालांकि: पहचानकर्ता समय के साथ बदल सकते हैं। मुझे नहीं पता कि यह विंडोज समय क्षेत्र पहचानकर्ताओं में कोई समस्या है, लेकिन यह निश्चित रूप से ओल्सन (जोनिनोफ़ो) डेटाबेस में होता है। उदाहरण के लिए, मैं हाल ही में "प्रशांत/पोनेपेई" में बदलकर "प्रशांत/पोनेपे" के कारण एक समस्या को देख रहा था।

मुझे संदेह है कि माइक्रोसॉफ्ट के पास आईडी पर कड़े नियंत्रण है, लेकिन वे भी समान रहने की संभावना रखते हैं - लेकिन फिर भी, देश अलग-अलग देशों में विभाजित हो सकते हैं (संभावित रूप से नए समय क्षेत्र बना सकते हैं) आदि

मैं इस समस्या के लिए को हल करने का सुझाव नहीं दे रहा हूं - बस इसे एक संभावित समस्या के रूप में हाइलाइट करना। आईडी भंडारण शायद सबसे अच्छा तरीका उपलब्ध है, लेकिन संभावित खतरों के बारे में पता होना है ...

+0

क्या टाइमज़ोनइन्फो के लिए स्ट्रिंग आईडी में एक पूर्णांक पत्राचार है? आश्चर्य है कि उन्होंने आईडी के लिए int प्रदान क्यों नहीं किया? –

+0

@ ray247: मुझे समय क्षेत्र आईडी और पूर्णांक के बीच किसी मैपिंग के बारे में पता नहीं है। –

+1

@ जोन - मुझे पता है कि यह बुरा है लेकिन मैंने पहला जवाब पढ़ा। देखा कि यह आप से था और मैंने बाकी को पढ़ने के लिए भी परेशान नहीं किया। क्या जॉन स्कीट द्वारा उत्तर देने के लिए कोई फ़िल्टर है? –

10

मुझे आईडी संग्रहित करने में कोई समस्या नहीं दिखाई देती है, क्योंकि वे विंडोज प्लेटफॉर्म पर निरंतर मूल्य प्रतीत होते हैं - यानी, एक विशिष्ट आईडी हमेशा उसी TimeZoneInfo ऑब्जेक्ट पर मैप करेगी, भले ही विंडोज़ का कौन सा संस्करण तुम इस्तेमाल।

मुझे यकीन नहीं है कि मोनो क्या करता है, लेकिन अगर यह वही होगा तो मुझे आश्चर्य नहीं होगा। आप हमेशा class source code देख सकते हैं।

0

जांच इन दोनों तरीकों

public static System.TimeZoneInfo FromSerializedString(string source) 
public string ToSerializedString() 

इन संभव :)

+1

निश्चित रूप से, लेकिन क्या ये धारावाहिक प्रतिनिधित्व संस्कृति-अज्ञेयवादी हैं? –

-2

मैं जितना की जानकारी की रक्षा करना चाहिए बस TimeZoneInfo.Id.GetHashCode() का उपयोग किया। परीक्षणों के अनुसार, यह अद्वितीय पूर्णांक आईडी उत्पन्न करता है जिसे डीबी में संग्रहीत किया जा सकता है। आप इन हैंश कोड होने के साथ कुंजी के साथ एक शब्दकोश भी बना सकते हैं और मूल्य रिवर्स लुकअप को आसान बनाने के लिए मूल आईडी स्ट्रिंग्स हैं।

+0

बेशक यह सिर्फ आईडी स्ट्रिंग हैश। यदि अंतर्निहित स्ट्रिंग ऊपर दिए गए चिह्नित उत्तर के अनुसार बदलती है; हैश बदल जाएगा। – ProVega

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