2012-05-08 16 views
9

Nella mia applicazione ho 4 caselle di testo e 2 caselle di testo per inserire l'ora di inizio e 2 caselle di testo per inserire l'ora di fine.Ottenere la differenza di tempo tra due valori

L'utente immetterà sempre un tempo completato, quindi l'input sarà sempre 11:30, 12:45 e così via.

Come posso ottenere la differenza in ore e minuti tra l'inizio e la fine?

+0

Qualcosa di simile [qui] (http://stackoverflow.com/ domande/2821040/how-do-i-get-il-tempo-differenza-tra-due-datetime-oggetti-con-c). – RBT

risposta

14

Utilizzare la classe TimeSpan e il metodo Sottrai di DateTime.

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

funziona alla grande, ma il risultato è 02:30:00, è possibile rimuovere i secondi in modo da visualizzare qualcosa come questo 2:30? – PandaNL

+1

@PandaNL: usa un modificatore di formato come '.ToString (" hh: mm ")'. – Skalli

+0

Se lavori solo con il tempo, dovresti usare 'TimeSpan' invece di' DateTime'. –

0

convertire le ore in minuti, aggiungerlo ai minuti esistenti, convertirli in secondi totali, fare lo stesso con ora di fine. meno loro l'uno dall'altro, li riconvertono in ore e minuti. ricordando 60 minuti in un'ora, 60 secondi in un minuto, ecco come vorrei affrontarlo. perché i secondi totali saranno sempre gli stessi, è difficile cercare di insegnare a un computer che tenta di passare da 60 a 0 o da 12 a 1. molto più facile da usare, a volte perfettamente lineare come secondi. poi riconvertire l'alto

+0

come potete vedere im più per fare la logica me stesso quindi è più comprensibile per me, piuttosto che tutti gli altri solo facendo tempi di data ... xD – RhysW

+1

Questo è imho eccessivamente complicato, TimeSpan è molto più facile e più sicuro per l'utente. – Skalli

+0

sono abituato a ricevere sfide dal mio vecchio tutor dove dovremmo fare progetti senza utilizzare funzioni incorporate per capire meglio come funzionava e per insegnarci a essere più logici, ancora non ha rotto quell'abitudine tristemente – RhysW

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

Esempio:

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

creare due DateTime oggetti analisi i valori nelle TextBox controlli e sufficiente sottrarre i due DateTime, si otterrà un oggetto TimeSpan che è quello che state cercando .

6

È possibile ottenere uno TimeSpan della differenza per sottrazione.

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

Uso periodo:

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

    TimeSpan result = dt2 - dt1; 

allora si può ottenere i minuti, secondi, ecc dal risultato.

0

È possibile sottrarre due DateTime s e ricevere una struttura TimeSpan. Questo ha proprietà per il recupero Days, Hours, Minutes, Seconds, ecc

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

uso TimeSpan, non c'è bisogno di usare date

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

TimeSpan result = end - start; 
var diffInMinutes = result.TotalMinutes(); 
Problemi correlati