Menghitung berapa menit antara dua kali


86

Saya memiliki datagridview dalam aplikasi saya yang menampung waktu mulai dan selesai. Saya ingin menghitung jumlah menit antara dua waktu ini. Sejauh ini saya sudah mendapatkan:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = TimeSpan.FromMinutes(varTime);

Tetapi baris terakhir tidak dapat dikompilasi karena dikatakan saya menggunakan argumen yang tidak valid untuk konstruktor Timespan. Saya telah meneliti sedikit tentang cara menghitung jumlah menit antara dua kali, tetapi saya sedikit menemui hambatan. Adakah yang bisa menasihati saya tentang cara terbaik untuk mencapai tujuan saya.

EDIT /

Sekarang kode saya adalah sebagai berikut:

var varFinish = tsTable.Rows[intCellRow]["Finish Time"];
TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue;
int intMinutes = (int)varTime.TotalMinutes;

Tapi saya mendapatkan gips yang tidak valid di baris kedua. Baik varFinish dan varValue adalah waktu, misalnya pukul 10:00 dan 8:00 mengatakan. Jadi tidak yakin mengapa mereka tidak mentransmisikan untuk mengetik DateTime?


Jika varFinish adalah string, Anda tidak dapat mentransmisikan string ke DateTime. Anda perlu menggunakan DateTime.Parse (...). Meskipun demikian, itu akan menyiratkan tanggal hari ini jika tidak ada tanggal di varFinish.
Jim

Jawaban:


160

Coba ini

DateTime startTime = varValue
DateTime endTime = varTime

TimeSpan span = endTime.Subtract ( startTime );
Console.WriteLine( "Time Difference (minutes): " + span.TotalMinutes );

Edit: Jika Anda mencoba 'span.Minutes', ini hanya akan mengembalikan menit dari rentang waktu [0 ~ 59], untuk mengembalikan jumlah semua menit dari interval ini, cukup gunakan 'span.TotalMinutes'.


2
Ini adalah jawaban yang bagus, tetapi memberikan 0 pada span. Menit ketika perbedaan antara dua waktu lebih besar dari 1 jam (yaitu 60 menit atau lebih)
Asif Mehmood

6
@Balikaspa. Saya baru mencoba ini dengan rentang waktu 61 menit dan saya mendapatkan 1 jam 1 menit, seperti yang diharapkan. Jika rentangnya tepat 60 menit, maka ya, menit akan menjadi nol. Apa yang kamu pikirkan TotalMinutes()?
Jim

17
TIDAK BENAR. span.Minutesmengembalikan angka [0..59]. Gunakan span.TotalMinutessebagai gantinya
Sten Petrov

2
Ini seharusnya bukan jawaban yang diterima. Sesuai komentar lainnya, itu tidak menyelesaikan pertanyaan dengan benar.
tjmoore

2
@tjmoore terima kasih atas umpan baliknya, saya setuju dengan Anda. Saya menjawab pertanyaan asli pada Jan 2012, setelah pertanyaan itu diedit. Saya terkadang mendapatkan suara negatif untuk jawaban ini, mungkin karena kebanyakan orang membaca jawaban 5 tahun setelah pertanyaan asli yang belum diedit diajukan.
Kane

35
double minutes = varTime.TotalMinutes;
int minutesRounded = (int)Math.Round(varTime.TotalMinutes);

TimeSpan.TotalMinutes : Jumlah total menit yang diwakili oleh instance ini.


2
Ya TotalMinutes adalah apa yang saya cari. Terima kasih banyak ^ _ ^
Wahid Bitar

int minutesRounded = (int) Math.Round (menit);
Sagi

9

Dalam kode pertanyaan Anda, Anda menggunakan secara TimeSpan.FromMinutestidak benar. Silakan lihat Dokumentasi MSDN untuk TimeSpan.FromMinutes, yang memberikan tanda tangan metode berikut:

public static TimeSpan FromMinutes(double value)

karenanya, kode berikut tidak dapat dikompilasi

var intMinutes = TimeSpan.FromMinutes(varTime); // won't compile

Sebagai gantinya, Anda dapat menggunakan properti TimeSpan.TotalMinutes untuk melakukan aritmatika ini. Misalnya:

TimeSpan varTime = (DateTime)varFinish - (DateTime)varValue; 
double fractionalMinutes = varTime.TotalMinutes;
int wholeMinutes = (int)fractionalMinutes;

3

Anda hanya perlu menanyakan TotalMinutesproperti seperti inivarTime.TotalMinutes


1

Jika perbedaan antara endTime dan startTime lebih besar dari atau sama dengan 60 Minutes , pernyataan: endTime.Subtract(startTime).Minutes;akan selalu kembali (minutesDifference % 60). Tentunya yang tidak diinginkan ketika kita hanya berbicara tentang menit (bukan jam di sini).
Berikut adalah beberapa cara jika Anda ingin mendapatkan total number of minutes(dalam typecasts berbeda):

// Default value that is returned is of type *double* 
double double_minutes = endTime.Subtract(startTime).TotalMinutes; 
int integer_minutes = (int)endTime.Subtract(startTime).TotalMinutes; 
long long_minutes = (long)endTime.Subtract(startTime).TotalMinutes; 
string string_minutes = (string)endTime.Subtract(startTime).TotalMinutes; 
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.