¿Cómo obtengo la diferencia horaria entre dos objetos DateTime usando C #?

159

¿Cómo obtengo la diferencia horaria entre dos DateTimeobjetos usando C #?

TinTin
fuente

Respuestas:

227

El siguiente ejemplo muestra cómo hacer esto:

DateTime a = new DateTime(2010, 05, 12, 13, 15, 00);
DateTime b = new DateTime(2010, 05, 12, 13, 45, 00);
Console.WriteLine(b.Subtract(a).TotalMinutes);

Cuando se ejecuta esto imprime "30" ya que hay una diferencia de 30 minutos entre la fecha / hora.

El resultado de DateTime.Subtract(DateTime x)es un objeto TimeSpan que proporciona otras propiedades útiles.

Daniel Renshaw
fuente
55
Para mostrar la diferencia, hacer algo como esto: Console.WriteLine((a - b).ToString(@"hh\:mm\:ss")). Ver: MSDN personalizada TimeSpan Formato
Ismael
Esto funcionó para mí. Solo quería saber cuántos segundos le toma al cliente hacer una llamada REST y recibir una respuesta.
Ziggler
1
¡Presta atención al uso TotalMinutes! (no Minutes)
Shahar Shokrani
64

Quieres la TimeSpanestructura:

TimeSpan diff = dateTime1 - dateTime2;

Un objeto TimeSpan representa un intervalo de tiempo (duración del tiempo o tiempo transcurrido) que se mide como un número positivo o negativo de días, horas, minutos, segundos y fracciones de segundo. La estructura TimeSpan también se puede usar para representar la hora del día, pero solo si la hora no está relacionada con una fecha en particular.

Existen varios métodos para recuperar los días, horas, minutos, segundos y milisegundos de esta estructura.

Si solo está interesado en la diferencia, entonces:

TimeSpan diff = Math.Abs(dateTime1 - dateTime2);

le dará la diferencia positiva entre los tiempos independientemente del orden.

Si acaba de obtener el componente de tiempo, pero los tiempos se pueden dividir para la medianoche, debe agregar 24 horas al intervalo para obtener la diferencia real:

TimeSpan diff = dateTime1 - dateTime2;
if (diff < 0)
{
    diff = diff + TimeSpan.FromDays(1);
}
ChrisF
fuente
hola, si datetime2 es 09:00 y dateTime1 es 18:00, diff es 09Hours 00 min. entonces, ¿cuál es la ecuación para datetime2 es 21:00 y dateTime1 es 03:00, entonces la diferencia es negativa e incorrecta? ¿Cómo resolver esto?
Pranesh Janarthanan
@Pranesh: si los objetos contienen una fecha, entonces no debería haber un problema. Si no contienen un tiempo, tome la diferencia absoluta o agregue 24 horas al intervalo de tiempo para dar una diferencia positiva. Lo que sea correcto dependerá de su aplicación.
ChrisF
Sí, ya eliminé esos comentarios! ¿me puede mostrar un ejemplo de código para su explicación?
Pranesh Janarthanan
30

Lo que necesita es usar el método Restar de las clases DateTime , que devuelve un TimeSpan .

var dateOne = DateTime.Now;
var dateTwo = DateTime.Now.AddMinutes(-5);
var diff = dateTwo.Subtract(dateOne);
var res = String.Format("{0}:{1}:{2}", diff.Hours,diff.Minutes,diff.Seconds));
Nate
fuente
10

La forma en que generalmente lo hago es restando los dos DateTime y esto me da un TimeSpan que me dirá la diferencia.

Aquí hay un ejemplo:

DateTime start = DateTime.Now;
// Do some work
TimeSpan timeDiff = DateTime.Now - start;
timeDiff.TotalMilliseconds;
Darik
fuente
4

SI ambos son valores UTC de fecha y hora que puede hacer TimeSpan diff = dateTime1 - dateTime2;

De lo contrario, su probabilidad de obtener la respuesta correcta en cada caso posible es cero.

Ian Mercer
fuente
3
 var startDate = new DateTime(2007, 3, 24);

 var endDate = new DateTime(2009, 6, 26);

 var dateDiff = endDate.Subtract(startDate);

 var date = string.Format("{0} years {1} months {2} days", (int)dateDiff.TotalDays / 365, 
 (int)(dateDiff.TotalDays % 365) / 30, (int)(dateDiff.TotalDays % 365) / 30);

 Console.WriteLine(date);
Mukund
fuente
2

Necesitas usar un TimeSpan . Aquí hay un código de muestra:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks);
Jason Webb
fuente
2
O simplementeTimeSpan sincelast = DateTime.Now - LastUpdate;
Ben M
2
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan timespan;
    timespan = dateTimePicker2.Value - dateTimePicker1.Value;
    int timeDifference = timespan.Days;
    MessageBox.Show(timeDifference.ToString());
}
Wong Lok Pan
fuente
2

Puede usarlo de la siguiente manera para lograr la diferencia entre dos objetos Datetime. Supongamos que hay objetos DateTime dt1 y dt2 y luego el código.

TimeSpan diff = dt2.Subtract(dt1);
Sunny Sandeep
fuente