2010-08-05 8 views
8

में कनवर्ट किसी का स्थानीय समय। सर्वर नीदरलैंड में है, इसलिए हम utc + 1 (अब, डेलाइटविंगटाइम के साथ, utc + 2 में)मैं एक छोटे से समय क्षेत्र :)</p> <p>मैं UTC में समय के साथ संग्रहीत डेटा है में खो रहा हूँ UTC समय

अब एक ग्राहक कहता है: मुझे 5 अगस्त से डेटा दें।

तो मुझे 'अपने समय' से यूटीसी समय की गणना करना है। कि मुझे पता करने के लिए है:

अपने यूटीसी ऑफसेट क्या है (हम संग्रहीत है कि उनके प्रोफ़ाइल में, मान लें कि यूटीसी -6 हैं) daylightsavingtime में आप कर रहे हैं (क्योंकि तब हम +1 जोड़ और यूटीसी ऑफसेट करना है -5)

तो मेरे सवालों का:

  1. मैं पूछ सकता हूँ नेट ढांचा: करता है देश XX daylightsavingtime है?

  2. क्या मैं नेट फ्रेमवर्क पूछ सकता हूं: देश में 08-05-2010T00: 00: 00 देश में XXX डेलाइटविंगटाइम है?

मैं .ToLocalTime() की कोशिश कर रहा गया है, लेकिन यह सिर्फ मेरे सर्वर पर स्थानीय समय देता है, और है कि नहीं मैं क्या चाहते हो, मैं उपयोगकर्ता के समय क्षेत्र के साथ गणना करना चाहते हैं, और भी तथ्य यह है कि कुछ ही समय में है कि खास बिंदु पर, अगर वह/वह daylightsavingtime

में है के साथ मैं भी इस वीबी उदाहरण देखा है:

TimeZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time") 
Dim Dated As DateTime = TimeZoneInfo.ConvertTimeToUtc(TempDate, TimeZone) 

लेकिन imho इस खाते में नहीं ले करता है कि उपयोगकर्ता इस टाइमज़ोन में डेलाइटविंगटाइम (डीएसटी) देश में है या नहीं है। उदाहरण के लिए, इस टाइमज़ोन में एक उपयोगकर्ता डीएचटी वाले नीदरलैंड्स में है, और एक दूसरे दूसरे देश में है जिसमें कोई डीएसटी नहीं है।

+1

संबंधित प्रश्न - http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – Oded

+0

महान संसाधन! – Michel

उत्तर

6

आप एक विशेष देश के बारे में रूपरेखा नहीं पूछ सकते हैं - लेकिन आप एक विशेष समय क्षेत्र के बारे में पूछ सकते हैं।

TimeZoneInfo खाते में डीएसटी लेते हैं। (हेक, इसमें IsDaylightSavingTime विधि अन्यथा नहीं होगी।) यदि आपके पास दो उपयोगकर्ता हैं, जिनमें से एक वर्तमान में डीएसटी देख रहा है और इनमें से कोई अन्य नहीं है, तो एक ही समय क्षेत्र में नहीं हैं ।

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

+0

ठीक है, धन्यवाद। लेकिन क्या आप कह रहे हैं कि उपयोगकर्ताओं को डीएसटी दर्ज करते समय अपना टाइमज़ोन बदलना होगा? उदाहरण के लिए, आमतौर पर मैं जीएमटी + 1 एम्स्टर्डम में हूं, लेकिन फिर डीएसटी दर्ज किया गया है, क्या मैं फिर जीएमटी + 2 में हूं? या मैं डीएसटी में जीएमटी + 1 में हूँ? यदि पूर्व मामला है, तो उपयोगकर्ता को अपने ऐप में अपना टाइमज़ोन बदलना होगा। (उस मामले में यह के रूप में आप कहते हैं कि काम करेंगे, क्योंकि उपयोगकर्ता जो एक डीएसटी देश में रहती है + 2 करने के लिए अपने समय क्षेत्र बदलने के होता है, और उपयोगकर्ता जो एक गैर डीएसटी देश में रहती है +1 में अपने समय क्षेत्र रखता है) – Michel

+0

@Michel: नहीं, समय क्षेत्र बताता है कि यह डीएसटी में प्रवेश करता है और बाहर निकलता है। उदाहरण के लिए, मैं ओलसन नाम "यूरोप/लंदन" के साथ समय क्षेत्र में हूं - यह साल के आधे साल के लिए यूटीसी है, और यूटीसी + 1 साल के आधे साल के लिए है। एक डीएसटी देश में आपका उपयोगकर्ता * समय क्षेत्र बदलता नहीं है - उनका समय क्षेत्र यूटीसी से ऑफसेट बदल जाता है। यह एक बहुत ही महत्वपूर्ण भेद है। –

+0

@ जोन: ठीक है, यह नहीं पता था कि टाइमज़ोन का ज्ञान है जब डीएसटी समाप्त होता है। लेकिन: तब भी यह जानना होगा कि आप कहां रहते हैं, क्योंकि यदि आपका क्षेत्र अभी डीएसटी में है, तो मैं टाइमज़ोन की जांच कर सकता हूं, लेकिन मुझे यह भी पता होना चाहिए कि आपका देश (जैसा कि आपके टाइमज़ोन में कई देश हैं) डीएसटी के साथ काम करता है या नहीं ? – Michel

2

समयक्षेत्र वर्ग एक विधि IsDaylightSavingTime कि पैरामीटर के रूप में एक तारीख लेने के लिए और एक बूलियन वापसी करता है, तो यह है कि यह दर्शाता है है उस टाइमज़ोन के लिए डेलाइटविंगटाइम में दिनांक।

+0

धन्यवाद हो सकता है।, लेकिन है कि केवल स्थानीय समय के लिए काम करता है, मेरे मामले में, एक asp.net सर्वर अनुप्रयोग में, उस स्थान जहां सर्वर स्थित है समय होगा। कि में मामला मैं जांच सकता हूं कि सर्वर सर्वर में है, लेकिन यदि उपयोगकर्ता किसी विशेष समय क्षेत्र में नहीं है। – Michel

2

मैं अपनी टिप्पणी को उत्तर में बढ़ावा देता हूं। यह एक जटिल समस्या प्रतीत होता है। http://www.timeanddate.com/time/dst2010.html पर देखो, दुनिया के विभिन्न देशों में डीएसटी की एक मेज है। आप इसे स्थिर कोड के साथ नहीं प्राप्त कर सकते क्योंकि डीएसटी न केवल देश से देश में बदलता है बल्कि साल-दर-साल भी बदलता है।

मैं तुम्हें डीएसटी जानकारी के साथ एक मेज को बनाए रखने और इसे से जानकारी प्राप्त करने के लिए है लगता है।

या आप एक वेब सेवा क्वेरी इस तरह के infos मिल कर सकते हैं।

http://www.earthtools.org/webservices.htm#timezone पर एक webservice के लिए देखें, जिसे आप अलग-अलग देश में समय प्राप्त करने के लिए पूछ सकते हैं जो डीएसटी खाते में है (यह केवल पश्चिमी यूरोप समय क्षेत्र के लिए काम करता है)। http://www.geonames.org/export/web-services.html पर भी देखें। इन सेवाओं का उपयोग करने के लिए आपको अपने उपयोगकर्ताओं को भौगोलिक स्थान प्राप्त करना होगा।

+0

मैं इस पाया है: 'timeZone.GetAdjustmentRules() [0] .DaylightTransitionStart' जो मुझसे कहता है जब डीएसटी एक विशेष क्षेत्र में शुरू होता है, कि एक ही है? – Michel

+0

मैं एमएसडीएन में देखता हूं। यह वही है, लेकिन http://www.timeanddate.com/time/dst2010.html पर जानकारी के मुताबिक डीएसटी सूचना एक गतिशील है, जो देशों के कानून संशोधन के अनुसार समय में बदलती है, इसलिए इसे "एम्बेडेड" नहीं किया जा सकता है एक स्थिर ढांचा। वैसे भी, मुझे लगता है कि कानूनों में संशोधन इतनी बार नहीं होता है, इसलिए यदि आप थोड़ी देर में गणना में गलती से परेशान नहीं हैं, तो आप डेलाइट ट्रांसिशन स्टार्ट के साथ जा सकते हैं –

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