Menampilkan Perbedaan antara dua nilai datetime dalam jam


186

Saya mengambil dua nilai waktu tanggal dari database. Setelah nilai diambil, saya perlu perbedaan antara dua nilai. Untuk itu, saya membuat variabel rentang waktu untuk menyimpan selisih 2 nilai tanggal.

TimeSpan? variable = datevalue1 - datevalue2;

Sekarang saya perlu menunjukkan perbedaan yang disimpan dalam variabel Timespan dalam hal jumlah jam. Saya merujuk ke TimeSpan.TotalHours tetapi tidak dapat menerapkan hal yang sama karena beberapa alasan. Bagaimana aku melakukan itu? Saya menggunakan C # pada proyek MVC. Saya perlu menunjukkan perbedaan nilai dalam hitungan jam?

EDIT: Karena rentang waktu dapat dibatalkan, saya tidak dapat menggunakan properti total jam. Sekarang saya dapat menggunakannya dengan melakukan TimeSpanVal.Value.TotalHours ;


3
Kenapa kamu tidak bisa menggunakan TimeSpan.TotalHours?
Fredrik Mörk

itu tidak mengizinkan saya untuk. Saya mencoba. :(
reggie

apakah karena rentang waktu saya dapat dibatalkan sehingga saya tidak dapat menggunakan properti totalhours?
Reggie

4
Lihat contoh perbedaan waktu, Perbedaan Jam, perbedaan Menit pada codegateway.com/2012/01/c-datetime-difference.html

objek TimeSpan memiliki total jam dalam.Value.TotalHours
smurtagh

Jawaban:


119

Saya pikir Anda bingung karena Anda belum mendeklarasikan bahwa TimeSpanAnda telah menyatakan TimeSpan?yang dapat dibatalkan TimeSpan . Hapus tanda tanya jika Anda tidak perlu dibatalkan atau gunakan variable.Value.TotalHours.


197

Anda mungkin juga ingin melihatnya

var hours = (datevalue1 - datevalue2).TotalHours;

tetapi dalam kasus ini sistem menunjukkan "'System.Nullable <System.TimeSpan>' tidak mengandung definisi untuk 'TotalHours' dan tidak ada metode ekstensi 'TotalHours' menerima argumen pertama dari tipe 'System.Nullable <System.TimeSpan>' bisa ditemukan ". Bisakah Anda jelaskan alasannya?
Neha

8
Nullable akan membutuhkan .Value.TotalHours, bukan hanya .TotalHours. Ini adalah faktor pembungkus yang dapat dibatalkan. Anda bisa juga melemparkannya sebagai rentang waktu -> ((TimeSpan) (nullabledatevalue1 - nullabledatevalue2)). TotalHours
MarkKGreenway

90

Dalam sampel, kami membuat dua objek datetime, satu dengan waktu saat ini dan yang lainnya dengan 75 detik ditambahkan ke waktu saat ini. Kemudian kita akan memanggil metode .Kurangi () pada objek DateTime kedua. Ini akan mengembalikan objek TimeSpan. Setelah kita mendapatkan objek TimeSpan, kita dapat menggunakan properti TimeSpan untuk mendapatkan Jam, Menit, dan Detik yang sebenarnya.

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

Hasil:

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

30
Anda ingin menggunakan "Total" seperti TotalSeconds, TotalMinutesdll
Filip Ekberg

38

Apakah ada alasan yang Anda gunakan Nullable ?

Jika ingin digunakan Nullablemaka Anda bisa menulisvariable.Value.TotalHours .

Atau Anda hanya dapat menulis: (datevalue1 - datevalue2).TotalHours.


Mungkin karena datevalue1 atau datevalue2 adalahDateTime?
Filip Ekberg

@Filip, tidak apa-apa, mereka seharusnya DateTime. Dalam. NET DateTime - DateTime = TimeSpan,.
Ilya Kogan

1
@Illya, maksud saya Mereka mungkin Nullable<DateTime>dan karena itu Anda mendapatkan Nullable<TimeSpan>.
Filip Ekberg

Jawaban Anda sangat efektif. Saya mencari itu.
gdmanandamohon

7

Berikut adalah contoh lain dari pengurangan dua tanggal dalam C # ...

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

3

cara yang lebih tepat untuk jam kerja yang dibayar karyawan atau persyaratan presisi lainnya ::

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)

juga dapat menambahkan perbedaan antara tanggal jika kita membandingkan dua tanggal yang berbeda

new TimeSpan(24 * days, 0, 0)

0

WOW, saya harus mengatakan: sederhananya:

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

Result: True

dan:

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

Result: 10.00:00:00

Objek DateTime memiliki semua logika bawaan untuk menangani hasil Boolean.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.