2010-05-12 30 views

Respuesta

165

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 esta imprime "30" ya que existe una diferencia de 30 minutos entre las fechas/horas.

El resultado de DateTime.Subtract(DateTime x) es un TimeSpan Object que le da otras propiedades útiles.

+4

Para mostrar la diferencia, haga algo como esto: 'Console.WriteLine ((a - b) .ToString (@" hh \: mm \: ss ")) '. Ver: [MSDN Custom TimeSpan Format] (http://msdn.microsoft.com/en-us/library/ee372287 (v ​​= vs.100) .aspx) – ishmael

19

Lo que necesita es utilizar el método de sustracción de clases DateTime, que devuelve 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)); 
45

desea que el TimeSpan struct:

TimeSpan diff = dateTime1 - dateTime2; 

objeto un intervalo de tiempo representa un intervalo de tiempo (duración de 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 son sólo interesado en la diferencia a continuación:

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

le dará la diferencia positiva entre el tiempo sin importar el orden.

Si acabas de salir del componente de tiempo, pero los tiempos se podría partir de la medianoche a continuación, es necesario agregar 24 horas al rango de medición para obtener la diferencia real:

TimeSpan diff = dateTime1 - dateTime2; 
if (diff < 0) 
{ 
    diff = diff + TimeSpan.FromDays(1); 
} 
+0

hi, si datetime2 es 09:00 y dateTime1 es 18:00 entonces 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? – Vijayaraghavan

+0

@Pranesh: si los objetos contienen una fecha, entonces no debería haber un problema. Si no contienen un tiempo, entonces tome la diferencia absoluta o agregue 24 horas al intervalo de tiempo para dar una diferencia positiva. Lo que es correcto dependerá de su aplicación. – ChrisF

+0

Sí, ya eliminé esos comentarios! ¿Puedes mostrarme un ejemplo de código para tu explicación? – Vijayaraghavan

3

Es necesario utilizar un TimeSpan. Aquí hay un código de ejemplo:

TimeSpan sincelast = TimeSpan.FromTicks(DateTime.Now.Ticks - LastUpdate.Ticks); 
+2

O simplemente 'TimeSpan sincelast = DateTime.Now - LastUpdate;' –

9

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

He aquí un ejemplo:

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

si ambos son los valores de fecha y hora UTC se puede hacer TimeSpan diff = dateTime1 - dateTime2;

De lo contrario la posibilidad de adquirir la respuesta correcta en cada caso posible es cero.

2
private void button1_Click(object sender, EventArgs e) 
{ 
    TimeSpan timespan; 
    timespan = dateTimePicker2.Value - dateTimePicker1.Value; 
    int timeDifference = timespan.Days; 
    MessageBox.Show(timeDifference.ToString()); 
} 
1

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

TimeSpan diff = dt2.Subtract(dt1); 
2
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); 
Cuestiones relacionadas