sharp - operadores logicos c#
Obtener el lapso de tiempo entre dos veces en C#? (4)
Tengo dos cuadros de texto. Uno para un reloj en el tiempo y otro para el reloj. Los tiempos se pondrán en este formato:
Hours:Minutes
Digamos que he registrado a las 7:00 a.m. y marcado a las 2:00 p.m.
Con mi código actual, obtengo una diferencia de 2 horas, pero deberían ser 7 horas. Cómo haría eso en C #. Iba a convertir a las 24 horas, al permitir que el usuario seleccionara AM o PM, pero me confundí.
Entonces, básicamente, ¿cómo calcularía la diferencia de horas entre las dos veces?
Intenté esto, pero obtuve 2 horas y no 7 cuando conecté los números.
DateTime startTime = Convert.ToDateTime(textBox1.Text);
DateTime endtime = Convert.ToDateTime(textBox2.Text);
TimeSpan duration = startTime - endtime;
Dos puntos:
Verifica tus entradas. No puedo imaginar una situación en la que obtendría 2 horas al restar los valores de tiempo de los que está hablando. Si hago esto:
DateTime startTime = Convert.ToDateTime("7:00 AM"); DateTime endtime = Convert.ToDateTime("2:00 PM"); TimeSpan duration = startTime - endtime;
...
-07:00:00
como resultado. E incluso si me olvido de proporcionar el valor de AM / PM:DateTime startTime = Convert.ToDateTime("7:00"); DateTime endtime = Convert.ToDateTime("2:00"); TimeSpan duration = startTime - endtime;
... Recibo
05:00:00
. Entonces, o bien sus entradas no contienen los valores que ha enumerado o se encuentra en un entorno de máquina donde se comienzan a analizar de una manera inesperada. O no está obteniendo los resultados que está informando.Para encontrar la diferencia entre una hora de inicio y una de finalización, debe hacer
endTime - startTime
, y no al revés.
Otra forma (más larga) En VB.net [Decir 2300 Inicio y 0700 Terminar el día siguiente]
Si tsStart> tsFinish Then
'' Take Hours difference and adjust accordingly
tsDifference = New TimeSpan((24 - tsStart.Hours) + tsFinish.Hours, 0, 0)
'' Add Minutes to Difference
tsDifference = tsDifference.Add(New TimeSpan(0, Math.Abs(tsStart.Minutes - tsFinish.Minutes), 0))
'' Add Seonds to Difference
tsDifference = tsDifference.Add(New TimeSpan(0, 0, Math.Abs(tsStart.Seconds - tsFinish.Seconds)))
Puedes usar el constructor TimeSpan que toma mucho tiempo para Ticks:
TimeSpan duration = new TimeSpan(endtime.Ticks - startTime.Ticks);
string startTime = "7:00 AM";
string endTime = "2:00 PM";
TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));
Console.WriteLine(duration);
Console.ReadKey();
Salida: 07:00:00.
También funciona si el usuario ingresa tiempo militar:
string startTime = "7:00";
string endTime = "14:00";
TimeSpan duration = DateTime.Parse(endTime).Subtract(DateTime.Parse(startTime));
Console.WriteLine(duration);
Console.ReadKey();
Salidas: 07:00:00.
Para cambiar el formato: duration.ToString(@"hh/:mm")
Más información en: http://msdn.microsoft.com/en-us/library/ee372287.aspx