İki zaman arasında kaç dakika olduğunu hesaplamak


86

Başvurumda, başlangıç ​​ve bitiş zamanlarını tutan bir veri görünümüm var. Bu iki zaman arasındaki dakika sayısını hesaplamak istiyorum. Şimdiye kadar aldım:

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

Ancak son satır, Timespan kurucusu için geçersiz argümanlar kullandığımı söylediği için derlenmeyecek. İki zaman arasındaki dakika sayısını nasıl hesaplayacağımı biraz araştırdım, ama biraz tuğla duvara çarpıyorum. Birisi bana amacıma ulaşmanın en iyi yolunu söyleyebilir mi?

DÜZENLE/

Şimdi kodum aşağıdaki gibidir:

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

Ama ikinci satırda geçersiz bir alçı alıyorum. Hem varFinish hem de varValue zamanlardır, örneğin 10:00 ve 8:00 diyelim. Öyleyse neden DateTime yazmak için yayın yapmayacaklarından emin değil misiniz?


VarFinish bir dizeyse, bir DateTime dizesini çeviremezsiniz. DateTime.Parse (...) kullanmanız gerekir. O zaman bile, varFinish'te tarih yoksa bugünün tarihi anlamına gelecektir.
Jim

Yanıtlar:


160

Bunu dene

DateTime startTime = varValue
DateTime endTime = varTime

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

Düzenleme: 'span.Minutes' deniyorsanız, bu yalnızca [0 ~ 59] zaman aralığının dakikalarını döndürür, bu aralıktaki tüm dakikaların toplamını döndürmek için 'span.TotalMinutes' kullanın.


2
Bu iyi bir cevap, ancak aralıkta 0 verir . İki zaman arasındaki fark 1 saatten fazla olduğunda dakika (yani 60 dakika veya daha fazla)
Asif Mehmood

6
@MalikAsif. Bunu 61 dakikalık bir aralıkla denedim ve beklendiği gibi 1 saat 1 dakika aldım. Süre tam olarak 60 dakika olsaydı, evet, dakika sıfır olurdu. Düşündün TotalMinutes()
Jim

17
DOĞRU DEĞİL. span.Minutes[0..59] sayı döndürür. span.TotalMinutesBunun yerine kullanın
Sten Petrov

2
Kabul edilen cevap bu olmamalı. Diğer yorumlara göre, soruyu doğru bir şekilde çözmüyor.
tjmoore

2
@tjmoore geri bildirim için teşekkürler, sana katılıyorum. Orijinal soruyu Ocak 2012'de yanıtladım, ardından soru düzenlendi. Bu cevap için ara sıra olumsuz oylar alıyorum, çünkü çoğu insan cevabı orijinal düzenlenmemiş soru sorulduktan 5 yıl sonra okuyor.
Kane

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

TimeSpan.TotalMinutes : Bu örnek tarafından temsil edilen toplam dakika sayısı.


2
Evet TotalMinutes aradığım şeydi. Çok teşekkür ederim ^ _ ^
Wahid Bitar

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

9

Soru kodunuzda TimeSpan.FromMinutesyanlış kullanıyorsunuz . Lütfen aşağıdaki yöntem imzasını veren TimeSpan.FromMinutes için MSDN Belgelerine bakın :

public static TimeSpan FromMinutes(double value)

bu nedenle, aşağıdaki kod derlenmeyecek

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

Bunun yerine, bu aritmetiği gerçekleştirmek için TimeSpan.TotalMinutes özelliğini kullanabilirsiniz. Örneğin:

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

3

Sadece TotalMinutesmülkü böyle sorgulamanız gerekiyorvarTime.TotalMinutes


1

EndTime ve startTime arasındaki fark 60 Dakika'dan büyük veya buna eşitse , ifade: endTime.Subtract(startTime).Minutes;her zaman döndürülür (minutesDifference % 60). Açıkçası, sadece dakikalardan bahsettiğimizde (burada saatler değil) bu arzu edilmiyor.
İşte almak istiyorsanız bazı yollar total number of minutes(farklı tip yayınlarda):

// 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; 
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.