यह अच्छा प्रश्न है। मैं इसे फिर से पुनर्जीवित कर रहा हूँ कि कैसे .Net विभिन्न Kindमूल्यों के साथ व्यवहार करती है । जैसा कि @ ज्यान जीच बताते हैं, यह वास्तव में महत्वपूर्ण रूप से महत्वपूर्ण संपत्ति है और यह इस बात पर निर्भर करता है कि आप उपयोग करते हैं Nowया नहीं UtcNow।
आंतरिक तारीख संग्रहीत के रूप में है Ticksजो (@Carl कैमरा के जवाब के विपरीत) अगर आप का उपयोग के आधार पर अलग है Nowया UtcNow।
DateTime.UtcNowअन्य भाषाओं की तरह व्यवहार करता है। यह TicksGMT आधारित मूल्य पर सेट होता है। यह भी सेट करता Kindहै Utc।
DateTime.Nowअगर यह जीएमटी टाइम ज़ोन में आपके दिन का समय था, तो इसकेTicks मूल्य को बदल देता है । यह भी सेट करता है ।KindLocal
यदि आप (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=Utci / o (प्रदर्शन और पार्सिंग) को छोड़कर हो। इसका मतलब है कि आपको लगभग हमेशा उन DateTime.UtcNowमामलों को छोड़कर उपयोग करना चाहिए , जहां आप केवल इसे प्रदर्शित करने के लिए ऑब्जेक्ट बना रहे हैं, और इसे तुरंत छोड़ दें।