2012-10-31 3 views
8

के साथ यूटीसी से यूएस माउंटेन समय में कनवर्ट करना मैं यूटीसी से पहाड़ के समय में कनवर्ट करने के लिए चारों ओर खोज रहा हूं और मैंने सफलतापूर्वक निम्न कार्य पाया है जो हर कोई कहता है कि डीएसटी खाता है। जब भी यह यूटीसी से माउंटेन में परिवर्तित हो जाता है तो ऑफसेट के लिए यह हमेशा होता है (जब यह वर्तमान में -6 होना चाहिए)। इसके अलावा ऐसा प्रतीत नहीं होता है। क्या कोई इस पर मेरे लिए कुछ प्रकाश डाल सकता है या इसे डीएसटी खाते में लाने के लिए एक तरीका है?डीटीएस

DateTime utcTime = new DateTime(createdDate.Ticks, DateTimeKind.Utc); 
DateTime mountainTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(utcTime, "US Mountain Standard Time"); 

धन्यवाद, Dman

+0

विशेष रूप से पहाड़ के लिए यूटीसी कन्वर्ट करने के लिए आप लक्ष्य है या यह करने के लिए है यूटीसी को क्लाइंट के टाइमज़ोन में कनवर्ट करें? –

उत्तर

13

ऐसा लगता है कि .NET में कम से कम दो जोन हैं (कम से कम मेरे विंडोज 8 इंस्टॉलेशन पर) जो पर्वत समय हैं। और सादे "पर्वतीय मानक समय" जो पालन करता डीएसटी -

"अमेरिका पर्वतीय मानक समय" जो आप उपयोग कर रहे हैं, और जो डीएसटी का पालन नहीं करता है (यह एरिजोना के लिए है) नहीं है। तो आप बस "अमेरिका" भाग से छुटकारा पाने की जरूरत है और यह काम करेगा:

using System; 

class Test 
{ 
    static void Main() 
    { 
     DateTime octoberUtc = new DateTime(2012, 10, 1, 0, 0, 0, DateTimeKind.Utc); 
     DateTime decemberUtc = new DateTime(2012, 12, 1, 0, 0, 0, DateTimeKind.Utc); 
     ConvertToMountainTime(octoberUtc); 
     ConvertToMountainTime(decemberUtc); 
    } 

    static void ConvertToMountainTime(DateTime utc) 
    { 
     DateTime mountain = TimeZoneInfo.ConvertTimeBySystemTimeZoneId 
      (utc, "Mountain Standard Time"); 

     Console.WriteLine("{0} (UTC) = {1} Mountain time", utc, mountain); 
    } 
} 

आउटपुट (यू संस्कृति):

01/10/2012 00:00:00 (UTC) = 30/09/2012 18:00:00 Mountain time 
01/12/2012 00:00:00 (UTC) = 30/11/2012 17:00:00 Mountain time 
+3

बहुत बहुत धन्यवाद! हर बार जब मैं जॉन से जवाब देखता हूं तो यह आम तौर पर बैंग पर होता है! महान काम और एसओ में अपना योगदान जारी रखें! – DMCApps

+1

"यूएस माउंटेन स्टैंडर्ड टाइम" जोन एरिजोना के लिए है, जो डेलाइट बचत को लागू नहीं करता है। DisplayName प्रॉपर्टी की जांच करें, और आप देखेंगे। –

+0

@MattJohnson: संपादित, धन्यवाद। –

1

पर्वतीय मानक समय अब ​​भी है -7। लोकप्रिय धारणा के लिए मतभेद, हम अपना समय नहीं बदलते हैं, लेकिन हमारे समय जोन। हमारा वर्तमान समय क्षेत्र वास्तव में माउंटेन डेलाइट टाइम है। समय क्षेत्र की जानकारी का पता लगाना .... अप्रिय

+1

दुर्भाग्य से यह इससे भी बदतर है - क्योंकि समय क्षेत्र आईडी .NET * पूरे समय क्षेत्र के लिए * मानक * आईडी का उपयोग करता है। (और नहीं, आप अपना समय क्षेत्र नहीं बदलते हैं। एक बार क्षेत्र पूरे समय को कवर करता है, और यह डीएसटी परिवर्तनों के बारे में जानता है।) तो उदाहरण के लिए, अधिक मानक ज़ोनिनोफ़/tzdb समय क्षेत्र डेटाबेस में, मैं "यूरोप" का उपयोग करता हूं/लंदन "समय क्षेत्र, जो यूटीसी और यूटीसी + 1 के बीच वैकल्पिक है। –

+0

मुझे लगता है कि उनका मतलब है कि क्षेत्र एमएसटी और एमडीटी (दोनों अलग-अलग समय क्षेत्र) के बीच बदलता है, और यह नहीं कि प्रोग्रामर को उस लोकेल के लिए समय क्षेत्र के बीच बदलना होगा। – Trevor

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