यह अच्छा प्रश्न है। मैं इसे फिर से पुनर्जीवित कर रहा हूँ कि कैसे .Net विभिन्न Kind
मूल्यों के साथ व्यवहार करती है । जैसा कि @ ज्यान जीच बताते हैं, यह वास्तव में महत्वपूर्ण रूप से महत्वपूर्ण संपत्ति है और यह इस बात पर निर्भर करता है कि आप उपयोग करते हैं Now
या नहीं UtcNow
।
आंतरिक तारीख संग्रहीत के रूप में है Ticks
जो (@Carl कैमरा के जवाब के विपरीत) अगर आप का उपयोग के आधार पर अलग है Now
या UtcNow
।
DateTime.UtcNow
अन्य भाषाओं की तरह व्यवहार करता है। यह Ticks
GMT आधारित मूल्य पर सेट होता है। यह भी सेट करता Kind
है Utc
।
DateTime.Now
अगर यह जीएमटी टाइम ज़ोन में आपके दिन का समय था, तो इसकेTicks
मूल्य को बदल देता है । यह भी सेट करता है ।Kind
Local
यदि आप (GMT-6) 6 घंटे पीछे हैं, तो आपको 6 घंटे पहले GMT का समय मिल जाएगा। .Net वास्तव में Kind
इस समय की उपेक्षा करता है और व्यवहार करता है जैसे कि यह 6 घंटे पहले था, भले ही यह "अब" माना जाता है। यह और भी अधिक टूट जाता है यदि आप एक DateTime
उदाहरण बनाते हैं तो अपना समय क्षेत्र बदलें और इसका उपयोग करने का प्रयास करें।
अलग-अलग 'काइंड' मूल्यों के साथ डेटटाइम इंस्टेंस संगत नहीं हैं।
आइए देखें कुछ कोड ...
DateTime utc = DateTime.UtcNow;
DateTime now = DateTime.Now;
Debug.Log (utc + " " + utc.Kind); // 05/20/2015 17:19:27 Utc
Debug.Log (now + " " + now.Kind); // 05/20/2015 10:19:27 Local
Debug.Log (utc.Ticks); // 635677391678617830
Debug.Log (now.Ticks); // 635677139678617840
now = now.AddHours(1);
TimeSpan diff = utc - now;
Debug.Log (diff); // 05:59:59.9999990
Debug.Log (utc < now); // false
Debug.Log (utc == now); // false
Debug.Log (utc > now); // true
Debug.Log (utc.ToUniversalTime() < now.ToUniversalTime()); // true
Debug.Log (utc.ToUniversalTime() == now.ToUniversalTime()); // false
Debug.Log (utc.ToUniversalTime() > now.ToUniversalTime()); // false
Debug.Log (utc.ToUniversalTime() - now.ToUniversalTime()); // -01:00:00.0000010
जैसा कि आप यहां देख सकते हैं, तुलना और गणित फ़ंक्शन स्वचालित रूप से संगत समय में परिवर्तित नहीं होते हैं। Timespan
लगभग एक घंटे किया जाना चाहिए था, लेकिन इसके बजाय लगभग 6. था "यूटीसी <अब" सच होना चाहिए (मैं भी सुनिश्चित करने के लिए एक घंटे के लिए जोड़ा), लेकिन अभी भी झूठा था।
आप 'आसपास के काम' को भी देख सकते हैं, जिसे केवल सार्वभौमिक समय में बदलना है जो कहीं भी Kind
नहीं है।
सवाल का मेरा सीधा जवाब इस बात से सहमत है कि हर एक का उपयोग करने के बारे में स्वीकार किए जाते हैं। आपको हमेशा ऐसी वस्तुओं के साथ काम करने की कोशिश करनी चाहिए DateTime
जो Kind=Utc
i / o (प्रदर्शन और पार्सिंग) को छोड़कर हो। इसका मतलब है कि आपको लगभग हमेशा उन DateTime.UtcNow
मामलों को छोड़कर उपयोग करना चाहिए , जहां आप केवल इसे प्रदर्शित करने के लिए ऑब्जेक्ट बना रहे हैं, और इसे तुरंत छोड़ दें।