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

159

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

TinTin
sumber

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.

Daniel Renshaw
sumber
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);
}
ChrisF
sumber
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));
Nate
sumber
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;
Darik
sumber
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.

Ian Mercer
sumber
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);
Mukund
sumber
2

Anda perlu menggunakan TimeSpan . Berikut ini beberapa contoh kode:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
Jason Webb
sumber
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());
}
Wong Lok Pan
sumber
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);
Sunny Sandeep
sumber