घंटों में दो डेटाटाइम मानों के बीच अंतर दिखाना


185

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

TimeSpan? variable = datevalue1 - datevalue2;

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

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


3
आप उपयोग क्यों नहीं कर सके TimeSpan.TotalHours?
फ्रेड्रिक मोर्क

यह मुझे अनुमति नहीं है। मैंने कोशिश की। :(
रेगी

क्या यह इसलिए है क्योंकि मेरा समय व्यर्थ है कि मैं कुल संपत्ति का उपयोग नहीं कर सकता हूं?
रेग

4
Datetime अंतर है, घंटे का अंतर, मिनट के अंतर पर का उदाहरण देखें codegateway.com/2012/01/c-datetime-difference.html

.Value.TotalHours
टाइमस्पैन

जवाबों:


118

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


196

आप भी देखना चाह सकते हैं

var hours = (datevalue1 - datevalue2).TotalHours;

लेकिन इस मामले में सिस्टम दिखाता है "" System.Nullable <System.TimeSpan> 'में' TotalHours 'की कोई परिभाषा नहीं है और कोई एक्सटेंशन विधि' TotalHours 'प्रकार का पहला तर्क स्वीकार नहीं करता है' System.Nullable <System.TimeSpan> ' पाया जायेगा "। क्या आप मुझे इसका कारण बता सकते हैं?
नेहा

8
अशक्त को केवल .TalalHours के बजाय .Value.TotalHours की आवश्यकता होगी। यह अशक्त लपेटने का एक कारक है। आप इसे वैकल्पिक रूप से एक टाइमपैन के रूप में डाल सकते हैं -> ((टाइमस्पैन) (nullabledatevalue1 - nullabledatevalue2))। TotalHours
MarkKGreenway

90

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

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 );

परिणाम:

Time Difference (seconds): 15
Time Difference (minutes): 1
Time Difference (hours): 0
Time Difference (days): 0

30
आप "कुल" का उपयोग करना चाहते हैं जैसे TotalSeconds, TotalMinutesआदि
फिलिप एकबर्ग

38

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

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

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


शायद क्योंकि datevalue1 या datevalue2 हैंDateTime?
फिलिप Ekberg

@ फीलिप, यह ठीक है, उन्हें होना चाहिए DateTime। .NET में DateTime - DateTime = TimeSpan
इलैया कोगन

1
@ इलिया, मेरा मतलब है कि वे शायद हैं Nullable<DateTime>और इसलिए आपको ए Nullable<TimeSpan>
फिलिप एकबर्ग

आपका जवाब वास्तव में प्रभावी है। मुझे इसकी तलाश थी।
gdmanandamohon

7

यहाँ C # में दो तिथियों को घटाने का एक और उदाहरण दिया गया है ...

if ( DateTime.Now.Subtract(Convert.ToDateTime(objDateValueFromDatabase.CreatedOn)).TotalHours > 24 ) 
{ 
... 
} 

3

कर्मचारी के भुगतान के घंटे या अन्य सटीक आवश्यकता के लिए एक अधिक सटीक तरीका :

decimal DeterminePreciseHours(DateTime startTimestamp, DateTime stopTimestamp)
{
    var span = (stopTimestamp - startTimestamp).Value;
    decimal total = (decimal)span.TotalMilliseconds / 60 / 60 / 1000;
    return Math.Round(total, PRECISION_CONSTANT);
}

https://dotnetfiddle.net/tVIoVJ


1
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)

0

वाह, मैं कहता हूँ: इसे सरल रखो:

MessageBox.Show("Result: " + (DateTime.Now.AddDays(10) > DateTime.Now));

Result: True

तथा:

MessageBox.Show("Result: " + DateTime.Now.AddDays(10).Subtract(DateTime.Now));

Result: 10.00:00:00

डेटटाइम ऑब्जेक्ट बूलियन परिणाम को संभालने के लिए सभी अंतर्निहित तर्क है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.