2011-02-09 8 views
131

मैं डेटाबेस से दो दिनांक समय मान पुनर्प्राप्त कर रहा हूं। एक बार मूल्य पुनर्प्राप्त हो जाने के बाद, मुझे दो मानों के बीच अंतर की आवश्यकता होती है। इसके लिए, मैं 2 दिनांक मानों के अंतर को संग्रहीत करने के लिए एक टाइमपैन चर बना देता हूं।घंटों में दो डेटाटाइम मानों के बीच अंतर दिखा रहा है

TimeSpan? variable = datevalue1 - datevalue2; 

अब मुझे टाइम्स पैनिएबल में घंटों की संख्या के संदर्भ में अंतर दिखाने की ज़रूरत है। मैंने TimeSpan.TotalHours को संदर्भित किया लेकिन किसी कारण से इसे लागू नहीं कर सका। मैं यह कैसे कर सकता हूं? मैं एक एमवीसी परियोजना पर सी # का उपयोग कर रहा हूँ। मुझे घंटों में अंतर मूल्य दिखाने की ज़रूरत है?

संपादित करें: चूंकि टाइमपैन शून्य हो गया था, इसलिए मैं कुल घंटों की संपत्ति का उपयोग नहीं कर सका। अब मैं टाइमस्पैनवेल कर कर इसका उपयोग कर सकता हूं। वैल्यूहोअर हॉर्स;

+3

क्यों y कहां 'टाइमस्पैन शाम्हारे' का उपयोग नहीं करते? –

+0

यह मुझे अनुमति नहीं देता है। मैंने कोशिश की। :( – reggie

+0

ऐसा इसलिए है क्योंकि मेरा टाइमपैन शून्य है कि मैं कुल संपत्ति का उपयोग नहीं कर सकता? – reggie

उत्तर

96

मुझे लगता है कि आप असमंजस में हैं क्योंकि आप एक TimeSpan घोषणा नहीं की आप एक TimeSpan? जो एक nullableTimeSpan है घोषित कर दिया है। या तो अगर आप इसे शून्य करने की आवश्यकता नहीं है या variable.Value.TotalHours का उपयोग करने की आवश्यकता नहीं है तो प्रश्न चिह्न हटा दें।

57

नमूना में, हम दो डेटाटाइम ऑब्जेक्ट्स बना रहे हैं, वर्तमान समय के साथ एक और 75 सेकंड के साथ वर्तमान समय में जोड़ा गया है। फिर हम विधि को कॉल करेंगे। दूसरी डेटटाइम ऑब्जेक्ट पर .ubtract()। यह एक टाइमस्पेन ऑब्जेक्ट वापस करेगा। एक बार जब हम टाइमस्पेन ऑब्जेक्ट प्राप्त करते हैं, तो हम वास्तविक समय, मिनट और सेकेंड प्राप्त करने के लिए टाइमस्पेन के गुणों का उपयोग कर सकते हैं।

DateTime startTime = DateTime.Now; 

DateTime endTime = DateTime.Now.AddSeconds(75); 

TimeSpan span = endTime.Subtract (startTime); 
Console.WriteLine("Time Difference (seconds): " + span.Seconds); 
Console.WriteLine("Time Difference (minutes): " + span.Minutes); 
Console.WriteLine("Time Difference (hours): " + span.Hours); 
Console.WriteLine("Time Difference (days): " + span.Days); 

परिणाम:

समय अंतर (सेकंड): 15 समय अंतर (मिनट): 1 समय अंतर (घंटे): 0 समय अंतर (दिन): 0

+18

आप "कुल" जैसे 'कुल सेकेंड', 'कुल मिनट' आदि का उपयोग करना चाहते हैं –

36

क्या कोई कारण है कि आप Nullable का उपयोग कर रहे हैं?

यदि आप Nullable का उपयोग करना चाहते हैं तो आप variable.Value.TotalHours लिख सकते हैं।

या आप बस लिख सकते हैं: (datevalue1 - datevalue2).TotalHours

+0

शायद इसलिए क्योंकि डेटवल्यू 1 या डेटवेल्यू 2 'डेटटाइम' हैं? –

+0

@ फिलिप, ठीक है, वे 'डेटटाइम' होना चाहिए। .NET में, 'डेटटाइम - डेटटाइम = टाइमस्पेन'। –

+1

@Illya, मेरा मतलब है कि वे शायद 'Nullable ' हैं और इसलिए आपको 'Nullable ' मिलता है। –

125

आप भी

var hours = (datevalue1 - datevalue2).TotalHours; 
+0

लेकिन इस मामले में सिस्टम "System.ullable 'में' TotalHours 'की परिभाषा नहीं है और' SystemHullable 'प्रकार के पहले तर्क को स्वीकार करने वाली कोई विस्तार विधि' TotalHours 'नहीं है। मिल सकता है "। क्या आप कृपया इसके कारण बता सकते हैं? – Neha

+5

Nullable की आवश्यकता होगी। कुल मिलाकर कुल मिलाकर। कुलहोर्स। यह नालीदार लपेटने का एक कारक है। आप इसे वैकल्पिक रूप से एक टाइमपैन के रूप में डाला जा सकता है -> ((टाइमस्पेन) (nullabledatevalue1 - nullabledatevalue2))। TotalHours – MarkKGreenway

5

यहाँ को देखने के लिए चाहते हो सकता है सी # में दो तिथियों को घटाकर का एक और उदाहरण है ...

if (DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24) 
{ 
... 
} 
0
var startTime = new TimeSpan(6, 0, 0); // 6:00 AM 
var endTime = new TimeSpan(5, 30, 0); // 5:30 AM 
var hours24 = new TimeSpan(24, 0, 0); 
var difference = endTime.Subtract(startTime); // (-00:30:00) 
difference = (difference.Duration() != difference) ? hours24.Subtract(difference.Duration()) : difference; // (23:30:00) 

भी दिनांकों के बीच अंतर में जोड़ सकते हैं अगर हम दो अलग-अलग तिथियों की तुलना करें

new TimeSpan(24 * days, 0, 0) 
संबंधित मुद्दे