2014-04-18 8 views
14

तो डेलाइट बचत समय प्रभाव में है, और एक तिथि वस्तु डेटाबेस (यूटीसी प्रारूप), जो आप इसे (उदाहरण के लिए asp.net-mvc में देखें) दृश्य में दिखाने के पुनः प्राप्त में सहेजा गया है।ConvertTimeFromUtc() और ToUniversalTime() डीएसटी संभालता है?

और तुम है कि इस विधि का उपयोग कर कार्य करें:

public static DateTime ConvertToLocalTimeFromUtcTime(DateTime utcDate, string timeZoneId) 
{ 
    TimeZoneInfo localZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId); 
    DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcDate, localZone); 

    if (localZone.IsDaylightSavingTime(localTime)) 
     localTime = localTime.AddHours(1); // is this needed !? 

    return localTime; 
} 

सवाल यह है कि, डीएसटी की संभाल TimeZoneInfo.ConvertTimeFromUtc() करता है या आप अपने आप को कि जाँच और या तो जोड़ सकते हैं या तारीख वस्तु के लिए एक्स घंटे (रों) घटाना है ? जब ToUniversalTime() साथ यूटीसी प्रारूप करने के लिए यह परिवर्तित करके डेटाबेस के लिए एक तिथि वस्तु बने के लिए

एक ही सवाल।

+1

आपका समय क्षेत्र शायद डीएसटी उपयोग कर रहा है अभी, जो अपने परीक्षण वास्तव में क्या करने के लिए आसान कर देगा;) –

+2

हां। चाहे किसी विशेष लोकेल में डीएसटी प्रभावी है, स्थानीय राजनीतिक निर्णय है। एक वेब सर्वर पर आप कभी भी पर्याप्त नहीं जानते हैं। हमेशा ब्राउजर में रूपांतरण करें, यह जानता है। –

+0

@AndrewMorton, सच है, और मैंने क्लाइंट से दिए गए समय से 2 घंटे घटाया था। लेकिन इसके विपरीत कैसे? क्या आप कह रहे हैं कि मुझे ज़ोन में उस समय को कनवर्ट करने की ज़रूरत नहीं है जिसे उपयोगकर्ता सर्वर पर है? – Quoter

उत्तर

14

हां। ConvertTimeFromUtc स्वचालित रूप से डेलाइट सेविंग टाइम एडजस्टमेंट को संभालेगा, जब तक आप जिस समय क्षेत्र को लक्षित कर रहे हैं वह डेलाइट सेविंग टाइम का उपयोग करता है।

the MSDN documentation से:

जब रूपांतरण प्रदर्शन, ConvertTimeFromUtc विधि destinationTimeZone समय क्षेत्र में प्रभाव में किसी भी समायोजन नियम लागू होता है।

आपको अपने रूपांतरण में अतिरिक्त घंटे जोड़ने का प्रयास करना चाहिए। इससे आपको गलत अनुवाद मिलेगा।

DateTime.ToUniversalTime के बारे में, यह ध्यान में डीएसटी ले, लेकिन इस विधि के साथ सावधान रहना है। यह मानता है कि इनपुट मान कंप्यूटर के स्थानीय समय क्षेत्र में है। यदि आपको इसे DateTimeKind.Utc के साथ चिह्नित करने की आवश्यकता है, तो इसके बजाय DateTime.SpecifyKind का उपयोग करें।

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