2012-05-08 14 views
9

W mojej aplikacji mam 4 pola tekstowe i 2 pola tekstowe do wprowadzenia czasu rozpoczęcia oraz 2 pola tekstowe do wprowadzenia czasu końcowego.Uzyskiwanie różnicy czasu między dwiema wartościami

Użytkownik zawsze wprowadzi ukończony czas, więc dane wejściowe będą zawsze o 11:30, 12:45 itd.

Jak mogę uzyskać różnicę w godzinach i minutach od początku do końca?

+0

coś podobnego [tutaj] (http://stackoverflow.com/ pytania/2821040/how-do-i-get-the-time-difference-between-two-datetime-objects-using-c). – RBT

Odpowiedz

14

Użyj klasy TimeSpan i metody Subtract dla DateTime.

 DateTime t1 = Convert.ToDateTime(textBox1.Text); 
     DateTime t2 = Convert.ToDateTime(textBox2.Text); 
     TimeSpan ts = t1.Subtract(t2); 
+0

działa świetnie, ale wynik jest 02:30:00, czy możliwe jest usunięcie sekund, więc wyświetli się coś takiego 2:30? – PandaNL

+1

@PandaNL: Użyj modyfikatora formatu takiego jak '.ToString (" hh: mm ")'. – Skalli

+0

Jeśli pracujesz tylko z czasem, naprawdę powinieneś używać 'TimeSpan' zamiast' DateTime'. –

0

zamień godziny na minuty, dodaj je do istniejących minut, zamień je na sekundy całkowite, zrób to samo z czasem końcowym. pomiń je od siebie, zamień je z powrotem na godziny i minuty. pamiętając 60 minut w godzinę, 60 sekund na minutę, tak jakbym sobie z tym poradził. ponieważ suma sekund będzie zawsze taka sama, jego trudna próba nauczenia komputera próbującego owijać się od 60 z powrotem do 0 lub od 12 do 1. znacznie łatwiej użyć czegoś idealnie liniowego jak sekundy. następnie przestawienia w górę

+0

jak widać im więcej za to, że sam wykonuję logikę, więc jest to dla mnie bardziej zrozumiałe, niż wszystkim innym, którzy tylko robią daty z datą ... xD – RhysW

+1

To jest zbyt skomplikowane, TimeSpan jest łatwiejszy i bezpieczniejszy dla użytkownika. – Skalli

+0

Jestem przyzwyczajony do tego, że otrzymałem wyzwania od mojego dawnego nauczyciela, gdzie musielibyśmy wykonać thigns bez korzystania z wbudowanych funkcji, aby lepiej zrozumieć, jak to działa i aby nauczyć nas, że jesteśmy bardziej logiczni, nadal nie łamaliśmy tego przyzwyczajenia smutnie – RhysW

1
TimeSpan difference = DateTime.Parse(txtbox1.Text) - Datetime.Parse(txtbox2.Text); 

Przykład:

TimeSpan difference = DateTime.Parse("12:55")-DateTime.Parse("11:45"); 
double hourDiff= difference.TotalHours; 
double minutes = difference.TotalMinutes; 
Console.WriteLine(hourDiff);//1.16666666666667 
Console.WriteLine(minutes);//70 
5

utworzyć dwa DateTime obiekty parsowania wartości w grupie kontrolnej TextBox i po prostu odjąć dwa DateTime, dostaniesz TimeSpan przedmiot, który jest to, czego szukasz .

6

Można uzyskać TimeSpan różnicy przez subtractraction.

TimeSpan time1 = TimeSpan.Parse(textBox1.Text); 
TimeSpan time2 = TimeSpan.Parse(textBox2.Text); 

TimeSpan difference = time1 - time2; 

int hours = difference.Hours; 
int minutes = difference.Minutes; 
1

Zastosowanie Okres:

DateTime dt1 = new DateTime(starttime.text); 
    DateTime dt2 = new DateTime(endtime.text); 

    TimeSpan result = dt2 - dt1; 

Następnie można uzyskać minuty, sekundy itd od wyniku.

0

Możesz odjąć dwa DateTime s i otrzymać strukturę TimeSpan. To ma właściwości do pobierania Days, Hours, Minutes, Seconds itd

var first = new DateTime(2012, 05, 08, 10, 30, 00); 
var second = new DateTime(2012, 05, 08, 11, 49, 13); 

var diff = first - second; 
var hours = diff.Hours; 
var mins = diff.Minutes; 
3

użytkowania Okres, nie trzeba używać daty

var start = TimeSpan.Parse(start.Text); 
var end = TimeSpan.Parse(end.Text); 

TimeSpan result = end - start; 
var diffInMinutes = result.TotalMinutes(); 
Powiązane problemy