2010-03-10 7 views
21

जब मैं डीटी के इस विशिष्ट मान के लिए कोड चलाता हूं, तो जब मैं ConvertTimeToUtc विधि को कॉल करता हूं तो अपवाद फेंक दिया जाता है। मेरे स्थानीय मशीन timeZoneId "GMT मानक समय"कुछ दिनांक दिनांक मानों के लिए TimeZoneInfo.ConvertTimeToUtc जब अपवाद कॉलिंग

var tzi = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"); 
var dt = new DateTime(1995, 4, 2, 2, 55, 0); 
var t = TimeZoneInfo.ConvertTimeToUtc(dt, tzi); 

है अपवाद है:

System.ArgumentException was unhandled 
Message="The supplied DateTime represents an invalid time. For example, when the clock is adjusted forward, any time in the period that is skipped is invalid.\r\nParameter 

उत्तर

23

हां, यह बिल्कुल सही है। 4:55 1 99 5 को केंद्रीय मानक समय में 2:55 बजे मौजूद नहीं था, दीवार घड़ी skipped from 2am to 3am due to daylight saving transitions के रूप में। अपवाद इस बारे में काफी स्पष्ट लगता है। ("मानक" का उपयोग यहां कुछ हद तक मुश्किल है; इसे "सेंट्रल टाइम" कहने के लिए और अधिक समझदारी होगी जिसमें "सेंट्रल स्टैंडर्ड टाइम" और "सेंट्रल डेलाइट टाइम" शामिल होगा लेकिन यह एक अलग मामला है। हेक, मैं पसंद करूंगा ओल्सन पहचानकर्ता खुद ...)

दूसरी बार, स्थानीय समय संदिग्ध हो सकता है - यदि घड़ी वापस एक घंटा (या अधिक!) तो स्थानीय समय दो बार हो सकता है।

सवाल यह है: आप इस स्थिति में अपना कोड कैसे व्यवहार करना चाहते हैं?

यह कुछ हद तक दुर्भाग्यपूर्ण है कि अपवाद ArgumentException - Noda Time में हमें इस सटीक मामले के लिए अपवाद होने वाला है, ताकि यह स्पॉट और पकड़ना आसान हो। (हमारे पास IsAmbiguous और IsSkipped की तरह कुछ भी होगा ताकि आप अपवाद को पकड़ने के बिना जांच सकें।)

लेकिन मूल संदेश यह है कि यह बीसीएल में एक बग नहीं है - यह जानबूझकर है।

17

एक

TimeZoneInfo.IsInvalidTime 

का उपयोग कर कि क्या सवाल में समय अमान्य है परीक्षण कर सकते हैं या अगर यह अस्पष्ट है

TimeZoneInfo.IsAmbiguousTime 

का उपयोग कर यदि यह अस्पष्ट है, समय की एक सरणी है कि लागू हो सकते हैं पुनः प्राप्त किया जा सकता है

TimeZoneInfo GetAmbiguousTimeOffsets 

एक इंटरैक्टिव एप्लिकेशन के मामले में, उपयोगकर्ता को संकेत दिया जा सकता है आर स्पष्टीकरण।

बीसीएल टीम विषय

http://blogs.msdn.com/b/bclteam/archive/2007/06/11/system-timezoneinfo-working-with-ambiguous-and-invalid-points-in-time-josh-free.aspx

के बारे में एक अच्छा ब्लॉग लिखा था
संबंधित मुद्दे