2012-04-04 9 views
8

क्या मध्य यूरोप के लिए एक सामान्य टाइमज़ोनइन्फो है जो सीईटी और सीईएसटी दोनों को एक में विचार करता है?क्या मध्य यूरोप के लिए एक सामान्य टाइमज़ोनइन्फो है?

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Central European Standard Time"); 
DateTimeOffset dto = new DateTimeOffset(someDate, tzi.BaseUtcOffset); 
var utcDate = dto.ToUniversalTime().DateTime; 

समस्या यह है कि यह गलत utcDate लौटा रहा है क्योंकि BaseUtcOffset +1 बजाय +2 है:

मैं एक ऐप्लिकेशन है जो निम्नलिखित कार्य कर रही है। ऐसा प्रतीत होता है कि सीईटी में डीएसटी भी है और वर्ष के समय के आधार पर यह +1 या +2 है।

उत्तर

5

सबसे पहले, मैं Noda समय का उपयोग करने का mgnoonan के जवाब की सराहना करना चाहते हैं :) लेकिन अगर आप कम रोमांच महसूस कर रहे हैं ...

आप पहले से ही सही समय क्षेत्र का उपयोग कर रहे हैं - लेकिन आप नहीं करना चाहिए BaseUtcOffset का उपयोग किया प्रलेखित डीएसटी के बारे में होने के लिए नहीं है जो:

वर्तमान समय क्षेत्र के मानक समय और समन्वित यूनिवर्सल समय (UTC) के बीच समय अंतर हो जाता है।

यह संभवतः जब आप इसे एक DateTime प्रदान लाने के लिए :)

मान लिया जाये कि someDate एक DateTime है के लिए ऑफसेट नहीं कर रहे हैं ध्यान में डीएसटी नहीं ले सकते हैं, आप इस्तेमाल कर सकते हैं:

DateTimeOffset dto = new DateTimeOffset(someDate, tzi.GetUtcOffset(someDate)); 

या बस ConvertTimeToUtc:

var utcDate = TimeZoneInfo.ConvertTimeToUtc(someDate, tzi); 

नोट यदि आपको डीएसटी संक्रमण के कारण दो बार ऐसा होता है, तो आपको यह करना चाहिए कि आप क्या करना चाहते हैं, या ऐसा नहीं होता है।

+0

मुझे पता था कि मुझे जवाब देने के लिए बस इंतजार करना चाहिए था। ;) – mgnoonan

+0

ग्रेट स्पष्टीकरण। हालांकि नोडा टाइम सही उपकरण हो सकता है, यह काम करता है और वर्तमान परियोजना के लिए सबसे अच्छा समाधान है। –

+0

बस एक मामूली टिप्पणी: ConvertTimeToUtc अब एक स्थिर विधि है, इसलिए आपको var utcDate = TimeZoneInfo.ConvertTimeToUtc (someDate, tzi) – Eoin

4

शायद Noda Time आपकी मदद कर सकते हैं?

+0

अगली बार जब मैं तिथियों का उपयोग करता हूं तो निश्चित रूप से नोडा टाइम को ध्यान में रखेगा। धन्यवाद! –

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