Bagaimana cara saya mendapatkan perbedaan waktu antara dua objek DateTime menggunakan C #?


159

Bagaimana cara saya mendapatkan perbedaan waktu antara dua DateTimeobjek menggunakan C #?

Jawaban:


227

Contoh berikut menunjukkan bagaimana melakukan ini:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

Ketika dieksekusi ini mencetak "30" karena ada perbedaan 30 menit antara tanggal / waktu.

Hasilnya DateTime.Subtract(DateTime x)adalah Obyek TimeSpan yang memberikan properti berguna lainnya.


5
Untuk menampilkan perbedaan, melakukan sesuatu seperti ini: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Lihat: Format TimeSpan Kustom MSDN
ishmael

Ini berhasil untuk saya. Saya hanya ingin berapa detik yang dibutuhkan klien untuk melakukan panggilan REST dan mendapatkan balasan.
Ziggler

1
Perhatikan penggunaan TotalMinutes! (tidak Minutes)
Shahar Shokrani

64

Anda ingin TimeSpanstruct:

TimeSpan diff = dateTime1 - dateTime2;

Objek TimeSpan mewakili interval waktu (durasi waktu atau waktu yang berlalu) yang diukur sebagai jumlah hari, jam, menit, detik, dan pecahan positif atau negatif dari satu detik. Struktur TimeSpan juga dapat digunakan untuk mewakili waktu hari, tetapi hanya jika waktu tidak terkait dengan tanggal tertentu.

Ada berbagai metode untuk mendapatkan kembali hari, jam, menit, detik, dan milidetik dari struktur ini.

Jika Anda hanya tertarik pada perbedaannya maka:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

akan memberi Anda perbedaan positif antara waktu terlepas dari urutan.

Jika Anda baru saja mendapatkan komponen waktu tetapi waktu dapat dipisah pada tengah malam maka Anda perlu menambahkan 24 jam ke rentang untuk mendapatkan perbedaan yang sebenarnya:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}

hai, jika datetime2 adalah 09:00 dan dateTime1 adalah 18:00 maka diff adalah 09 jam 00 menit. lalu apa persamaan untuk datetime2 adalah 21:00 dan dateTime1 adalah 03:00 maka perbedaannya adalah negatif dan salah. Bagaimana cara mengatasinya?
Pranesh Janarthanan

@Pranesh - jika objek berisi tanggal maka seharusnya tidak ada masalah. Jika mereka tidak mengandung waktu maka ambil perbedaan absolut atau tambahkan 24 jam ke rentang waktu untuk memberikan perbedaan positif. Mana yang benar akan tergantung pada aplikasi Anda.
ChrisF

Ya, saya sudah menghapus komentar itu! dapatkah Anda tunjukkan contoh kode untuk penjelasan Anda?
Pranesh Janarthanan

30

Yang Anda butuhkan adalah menggunakan metode Kurangi kelas DateTime , yang mengembalikan TimeSpan .

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));

10

Cara yang biasanya saya lakukan adalah mengurangi dua DateTime dan ini memberi saya TimeSpan yang akan memberi tahu saya perbedaannya.

Ini sebuah contoh:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;

4

JIKA keduanya nilai waktu tanggal UTC yang dapat Anda lakukan TimeSpan diff = dateTime1 - dateTime2;

Kalau tidak, kesempatan Anda untuk mendapatkan jawaban yang benar dalam setiap kasus yang mungkin adalah nol.


3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);

2

Anda perlu menggunakan TimeSpan . Berikut ini beberapa contoh kode:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);

2
Atau hanyaTimeSpan sincelast = DateTime.Now - LastUpdate;
Ben M

2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}

2

Anda bisa menggunakan dengan cara berikut untuk mencapai perbedaan antara dua Objek Datetime. Misalkan ada objek DateTime dt1 dan dt2 maka kodenya.

TimeSpan diff = dt2.Subtract(dt1);
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.