2013-03-28 5 views
5

मुझे पता है कि हम मौजूदा धागे के लिए वर्तमान संस्कृति को बदल सकते हैं। और मुझे पता है हम TimeZoneInfoCurrentCultureक्योंकि एक संस्कृति से नहीं मिल सका हो सकता है कई समय क्षेत्रोंसंयुक्त राज्य अमेरिका तरहप्रति थ्रेड टाइमज़ोन कैसे सेट करें?

लेकिन उसी तकनीक का उपयोग करने के लिए वर्तमान धागा के लिए समयक्षेत्र से निपटने के लिए है।

यह बहुत अच्छा होगा अगर हम कुछ इस तरह बना सकते हैं होगा:

TimeZone.CurrentTimeZone = TimeZoneInfo.FindSystemTimeZoneById("timezone id"); 
+1

हम नेट साइट के लिए एक वांछित सुविधाओं, हम कर रहे हैं नहीं कर रहे हैं ठोस प्रश्न साइट के ठोस जवाब। टाइमज़ोन हैंडलिंग सबसे अच्छा समय पर गैर-तुच्छ है, एक टाइमज़ोन प्रति-थ्रेड की जटिलता की परत जोड़ना सिर्फ – Petesh

+0

@ पेतेश के लिए पूछ रहा है, वास्तव में पूछने का मतलब नहीं था कि वास्तव में क्यों। मैं सोच रहा था कि क्या यह किसी भी तरह से संभव है। –

+1

टाइमज़ोन के लिए थ्रेड-लोकल ऑब्जेक्ट बनाने से आपको कुछ भी रोक नहीं है, यह सिर्फ इतना है कि आपके कोड को छोड़कर कुछ भी इसका उपयोग नहीं करेगा। आपको इसे लागू करने के लिए एक छोटे से तरीके के लिए .NET में ['थ्रेडलोकल 'कक्षा] (http://msdn.microsoft.com/en-us/library/dd642243.aspx) देखना चाहिए। – Petesh

उत्तर

5

दुर्भाग्य से, "वर्तमान" समय क्षेत्र के किसी भी अवधारणा मशीन के ऑपरेटिंग सिस्टम सेटिंग्स से जुड़ा हुआ है कि कोड चल रहा है। समय क्षेत्र बदलने के लिए कुछ Win32 एपिस हैं, लेकिन मैं उनका उपयोग करने की अनुशंसा नहीं करता हूं। न केवल वे "थ्रेड-सुरक्षित" हैं, लेकिन वे "प्रक्रिया-सुरक्षित" नहीं हैं। समय क्षेत्र सेटिंग मशीन पर चल रही सब कुछ को प्रभावित करती है।

उस ने कहा, मैं उत्सुक हूं कि आपका उपयोग केस वास्तव में क्या है। यदि आप प्रति थ्रेड टाइमज़ोन सेट करने की स्थिति में हैं, तो संभवतः आप स्थानीय सेटिंग पर भरोसा न करने की स्थिति में हैं। आप इसके बजाय TimeZoneInfo पर रूपांतरण विधियों का उपयोग कर सकते हैं।

उदाहरण के लिए, कहें कि आप किसी अन्य समय क्षेत्र में वर्तमान समय की तलाश में थे। आप ऐसा करने की क्षमता की तलाश में हो सकता है:

using (TimeZone.CurrentTimeZone = ... ) 
{ 
    var now = DateTime.Now; 
} 

लेकिन बजाय आप बस यूटीसी जहां उपयुक्त से परिवर्तित करना चाहिए:

var now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
         DateTime.UtcNow, "some other timezone id"); 
+0

समय-क्षेत्र का उपयोग विभिन्न कार्यों में अंतर्निहित रूप से किया जाता है (उदाहरण के लिए 'एडजस्टोउ यूनिवर्सल' का उपयोग करके स्ट्रिंग से डेट-टाइम में रूपांतरण)। स्पष्ट समय-क्षेत्र का उपयोग करने के लिए उन्हें निश्चित रूप से मैन्युअल रूप से बदला जा सकता है, लेकिन यह एक बड़े कोड-बेस में आसान नहीं है। इसी तरह आप 'string.Format()' जैसे कार्यों में उपयोग करने के लिए संस्कृति को स्पष्ट रूप से निर्दिष्ट कर सकते हैं - लेकिन वहां आपके पास थ्रेड के लिए संस्कृति सेट करने का विकल्प है और एक ही समय में 'उन्हें ठीक करें'। – MiMo

+2

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

+0

हां, मुझे पता है - मेरी पिछली टिप्पणी आपके प्रश्न का एक उत्तर देने का उत्तर था 'इस तरह की चीज़ का उपयोग (क्या होगा) - यदि यह अस्तित्व में था। – MiMo

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