2013-03-17 8 views
7

वर्ष 2013 में, यूनाइटेड किंगडम 31 मार्च तक डेलाइट बचत समय शुरू नहीं करेगा।क्यों .NET सही समय को परिवर्तित नहीं करता है?

फिर भी, TimeZoneInfo.ConvertTimeToUtc एक घंटे को घटा देता है जब मैं किसी दिए गए समय को यूटीसी समय में परिवर्तित करने का प्रयास करता हूं।

ऐसा क्यों है? क्या मुझे इस विधि को बताने की ज़रूरत है कि डेलाइट बचत समय सक्रिय नहीं है?

var now = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified); 
var convertedTime = TimeZoneInfo.ConvertTimeToUtc(now, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time")); 
Console.WriteLine(convertedTime); // subtracts one hour, even though England time and GMT should be equal 
+0

'डब्ल्यू। यूरोप मानक 'टाइमज़ोन' यूटीसी + 01.00' नहीं है? –

+3

आपको वास्तव में @ जोनस्केट द्वारा नोडाटाइम http://noda-time.blogspot.com/ को आजमाएं। इसे .NET में एक नई डेटटाइम एपीआई के रूप में शामिल किया जाना चाहिए। –

+0

@ सोनर गोनुल: नहीं, यह नहीं है। जब यह डेलाइट बचत समय नहीं है। –

उत्तर

7

आप बस का उपयोग कर रहे प्रविष्टि मौजूद होती है गलत समय क्षेत्र इंग्लैंड "जीएमटी मानक समय" क्षेत्र में है।

"डब्ल्यू यूरोप मानक समय" क्षेत्र महाद्वीपीय यूरोप, एम्स्टर्डम, बर्लिन, बर्न, रोम, स्टॉकहोम, वियना, यूटीसी + 01: 00 के लिए है।

+0

क्या आप इसके बारे में निश्चित हैं? यह वेबसाइट कहती है, "यूके पश्चिमी यूरोपीय समय क्षेत्र में है।" http://wwp.greenwichmeantime.com/time-zone/europe/uk/ –

+0

यहां एक और है जो कहता है कि मैं वास्तव में क्या कह रहा हूं: WET = GMT, लेकिन जब डीएसटी प्रभावी है, WET = GMT + 1. http: //wwp.greenwichmeantime.co.uk/time-zone/europe/uk/time/ –

+6

हाँ, मुझे यकीन है। आपको विंडोज टाइमज़ोन नामों का उपयोग करने की आवश्यकता होगी, जो भी कुछ वेब पेज इसे कॉल नहीं करता है। –

2

[ध्यान दें: यह जवाब मान लिया गया कंप्यूटर कोड चल रहा GMT समय क्षेत्र में है]

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

इसके कारण, आपने अनजाने में इसे यूटीसी में एक समय बदलने के लिए कहा है और इसे यूटीसी (यानी जीएमटी समय) पारित किया है, लेकिन फिर यह बताया कि समय "डब्ल्यू यूरोप मानक समय" में है, जो कि है यूटीसी से एक घंटा आगे।

तो स्वाभाविक रूप से, परिणामस्वरूप समय एक घंटे में अलग होता है। कदम से

कदम:

var now = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified); 

यह यूटीसी में समय-now सेट।

var convertedTime = TimeZoneInfo.ConvertTimeToUtc(now, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time") 

यह UTC से now बदल देता है, यह सोचते हैं कि now "डब्ल्यू यूरोप मानक समय" में है, यानि कि यूटीसी +1। लेकिन यह नहीं है! इसलिए परिणाम गलत है।

ध्यान दें कि "W. Europe Standard time" यूटीसी होना चाहिए, लेकिन यह किसी कारण के लिए नहीं है [नीचे टिप्पणी के जवाब में संपादित करें]। और जब आप ऐसा करते हैं:

TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time") 

यह (स्पष्ट रूप से) सही यूटीसी के बजाय यूटीसी + 1 देता है। यह नाम को "W. Europe Daylight Time" में भी बदल देता है। ऐसा लगता है कि यह एक उत्सुक बग हो सकता है?

[दूसरा संपादित करें]

चेक बाहर Microsoft Time Zone Index Values (and also here)। (नोट न तो उन लिंक्स के विंडोज 7 के लिए वास्तव में कर रहे हैं, लेकिन वे एक ही परिभाषाओं होते हैं।)

यह "डब्ल्यू यूरोप मानक समय" जो निश्चित रूप से कहा गया है (GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna

+0

यदि आप किसी भी ऑनलाइन कनवर्टर्स को देखते हैं, और आप यूके समय को यूटीसी में बदलने की कोशिश करते हैं, तो आप ' देखेंगे कि वे वही हैं और वे 31 मार्च तक होंगे। क्या मैं कुछ भूल रहा हूँ? –

+0

क्या आप ब्रिटेन में हैं? यदि आप हैं, तो आपका कोड एक घंटे तक का समय निकाल देगा। –

+1

"ऐसा इसलिए है क्योंकि" डब्ल्यू यूरोप मानक समय "यूटीसी के समान समय क्षेत्र नहीं है।" वास्तव में? क्या आपके पास इसका संदर्भ है? क्योंकि [विकिपीडिया आपसे असहमत है] (http://en.wikipedia.org/wiki/Western_European_Time)। – svick

-1

वैसे हम दोनों पश्चिमी यूरोपीय समय हैं, और पश्चिमी यूरोपीय ग्रीष्मकालीन/डेलाइट समय यह नहीं है?ऐसा हो सकता है कि पश्चिमी यूरोपीय मानक समय में प्रवेश करके, आप स्वचालित रूप से निकटतम से मेल खाते हैं, जो ग्रीष्मकालीन या डेलाइट होगा - चाहे मानक को टाइमज़ोन के रूप में सूचीबद्ध किया गया हो।

संयोग से, ब्रिटिश ग्रीष्मकालीन समय पश्चिमी यूरोपीय डेलाइट/ग्रीष्मकालीन समय जैसा ही है। और ग्रीनविच का मतलब पश्चिमी यूरोपीय समय से मेल खाता है - एक ही समय क्षेत्र, लेकिन 2002 में यूरोपीय संघ के नियमों के साथ मेल खाने से पहले बीएसटी ऐतिहासिक रूप से शुरू हुआ था। प्रभावी रूप से, एक ही प्रणाली अलग-अलग नाम।

+0

यह पहले ही उत्तर दिया गया था, और चिह्नित उत्तर सही है। वे सिर्फ गलत विंडोज टाइम जोन आईडी का उपयोग कर रहे थे। –

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