İki datetime değeri arasındaki farkı saat cinsinden gösterme


186

Veritabanından iki tarih saat değeri alıyorum. Değer alındıktan sonra, iki değer arasındaki farka ihtiyacım var. Bunun için, 2 tarih değerinin farkını saklamak için bir zaman aralığı değişkeni oluşturuyorum.

TimeSpan? variable = datevalue1 - datevalue2;

Şimdi saat cinsinden Timespan değişkeninde saklanan farkı göstermek gerekir. TimeSpan.TotalHours'a atıfta bulundum, ancak aynı nedenden dolayı aynı şeyi uygulayamadım. Bunu nasıl yaparım? Bir MVC projesinde C # kullanıyorum. Fark değerini saat cinsinden göstermem gerekiyor mu?

EDIT: zaman aralığı geçersiz olduğu için, toplam hours özelliği kullanamadı. Şimdi TimeSpanVal.Value.TotalHours yaparak kullanabilirsiniz ;


3
Neden kullanamıyorsun TimeSpan.TotalHours?
Fredrik Mörk

izin vermiyor. denedim. :(
reggie

benim timepan totalhours özelliği kullanamazsınız nullable olduğu için mi?
reggie

4
Tarih / saat farkı, Saat Farkı, Dakika farkı codegateway.com/20/20/01/c-datetime-difference.html

TimeSpan nesnesinin toplam saati var.Value.TotalHours
smurtagh

Yanıtlar:


119

Sanırım kafan karıştı çünkü null olabilecek bir TimeSpanilan etmedin . Sıfırlanabilir veya kullanmanız gerekmiyorsa soru işaretini kaldırın .TimeSpan? TimeSpanvariable.Value.TotalHours


197

ayrıca bakmak isteyebilirsiniz

var hours = (datevalue1 - datevalue2).TotalHours;

ancak bu durumda sistem "System.Nullable <System.TimeSpan>" ifadesinin "TotalHours" için bir tanım içermediğini ve 'System.Nullable <System.TimeSpan>' türünün ilk bağımsız değişkenini kabul eden 'TotalHours' uzantı yöntemini gösteremediğini gösterir. bulunan ". Bana bunun nedenini söyler misiniz?
Neha

8
Nulllable öğesinin yalnızca .TotalHours yerine .Value.TotalHours gerekir. Sıfırlanabilir sargının bir faktörü. Alternatif olarak bir zaman aralığı olarak yayınlayabilirsiniz
MarkKGreenway

90

Örnekte, biri geçerli zamana ve diğeri geçerli zamana eklenen iki datetime nesnesi yaratıyoruz. Sonra ikinci DateTime nesnesinde .Subtract () yöntemini çağıracağız. Bu bir TimeSpan nesnesi döndürür. TimeSpan nesnesini aldıktan sonra, gerçek Saat, Dakika ve Saniye almak için TimeSpan özelliklerini kullanabiliriz.

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

Sonuç:

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

30
Sen TotalSeconds, TotalMinutesvb "gibi" Toplam "kullanmak istiyorum
Filip Ekberg

38

Kullanmanız için bir neden var mı Nullable?

Kullanmak isterseniz Nullableyazabilirsiniz variable.Value.TotalHours.

Ya da sadece yazabilirsiniz: (datevalue1 - datevalue2).TotalHours.


Muhtemelen datevalue1 veya datevalue2 olduğu içinDateTime?
Filip Ekberg

@Filip, sorun değil DateTime. .NET'te DateTime - DateTime = TimeSpan,.
Ilya Kogan

1
@Illya, demek istediğim onlar muhtemelen Nullable<DateTime>ve bu yüzden bir Nullable<TimeSpan>.
Filip Ekberg

Cevabınız gerçekten etkili. Onu arıyordum.
gdmanandamohon

7

İşte C # iki tarih çıkarma başka bir örnek ...

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

3

çalışanların ödediği saatler veya diğer hassas gereksinimler için daha kesin bir yol :

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)

iki farklı tarihi karşılaştırırsak tarihler arasında fark ekleyebilir

new TimeSpan(24 * days, 0, 0)

0

WOW, şunu söylemeliyim: basit tut:

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

Result: True

ve:

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

Result: 10.00:00:00

DateTime nesnesi, Boole sonucunu işlemek için tüm yerleşik mantığa sahiptir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.