2012-05-08 14 views
9

En mi aplicación tengo 4 cuadros de texto y 2 cuadros de texto para ingresar la hora de inicio, y 2 cuadros de texto para ingresar la hora de finalización.Cómo obtener la diferencia horaria entre dos valores

El usuario siempre ingresará un tiempo completado, por lo que la entrada siempre será a las 11:30, 12:45, y así sucesivamente.

¿Cómo puedo obtener la diferencia en horas y minutos entre el inicio y el final del tiempo?

+0

Algo similar [aquí] (http://stackoverflow.com/ preguntas/2821040/how-do-i-get-the-time-difference-between-two-datetime-objects-using-c). – RBT

Respuesta

14

Utilice la clase TimeSpan y el método de resta de DateTime.

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

Esto funciona bien, pero el resultado es 02:30:00, ¿es posible quitar los segundos para que se muestre algo así 2:30? – PandaNL

+1

@PandaNL: utilice un modificador de formato como '.ToString (" hh: mm ")'. – Skalli

+0

Si solo está trabajando con el tiempo, realmente debería usar 'TimeSpan' en lugar de' DateTime'. –

0

convierta las horas a minutos, agréguelas a los minutos existentes, conviértalas en segundos totales, haga lo mismo con endtime. menos ellos el uno del otro, convertirlos de nuevo a horas y minutos. recordando 60 minutos en una hora, 60 segundos en un minuto, así es como lo manejaría. porque los segundos totales siempre serán los mismos, es difícil tratar de enseñarle a una computadora que intenta envolver de 60 a 0 o de 12 a 1. Es mucho más fácil usar algo perfectamente lineal como segundos. luego reconvertir hacia arriba

+0

como puede ver más para hacer la lógica yo mismo así que es más comprensible para mí, en lugar de que todos los demás solo hagan citas ... xD – RhysW

+1

Esto es demasiado complicado, TimeSpan es mucho más fácil y seguro para el usuario. – Skalli

+0

Estoy acostumbrado a que mi antiguo tutor me impusiera desafíos cuando deberíamos hacer las cosas bien sin usar funciones incorporadas para comprender mejor cómo funcionaba y para enseñarnos a ser más lógicos, aún no hemos roto ese hábito tristemente – RhysW

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

Ejemplo:

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

crear dos DateTime objetos de análisis de los valores en los TextBox controles y sólo hay que restar los dos DateTime, recibirá un objeto TimeSpan que es lo que busca .

6

Puede obtener un TimeSpan de la diferencia por sustracción.

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 lapso de tiempo:

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

    TimeSpan result = dt2 - dt1; 

entonces se puede obtener los minutos, segundos, etc a partir del resultado.

0

Puede restar dos DateTime sy recibir una estructura TimeSpan. Esto tiene propiedades para recuperar Days, Hours, Minutes, Seconds, etc.

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, sin necesidad de utilizar las fechas

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

TimeSpan result = end - start; 
var diffInMinutes = result.TotalMinutes(); 
Cuestiones relacionadas