unario sharp residuo operadores operador logicos jerarquia entonces comandos c# datetime timespan

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:

  1. 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.

  2. 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