2010-05-19 15 views
5

Quiero comparar dos dateTime.DateTime Compare en C#

Ex:

date1 = 13/01/2004 12:20:00 
    date2 = 13/01/2004 12:35:00 
    result = Compare(date2-date1); 
    O/P : 15 Minutes 

Respuesta

11

Prueba esto:

TimeSpan diff = date2.Subtract(date1); 
+0

¿Es un TimeSpan siempre positivo? Entonces: date2.Subtract (date1) es igual a: date1.Subtract (date2) ??? – Michiel

+1

@Michiel, no, el resultado será diferente, uno es un número positivo (+15 minutos, +0.25 horas, +900000 tics) y otro es negativo (-15 minutos, -0.25 horas, -900000 tics) – Artru

4

¿Qué tal

if (date1 < date2) 
{ 
    // date1 is before date2 
} 
13

Para comparar, sólo tiene que utilizar el operador <: date1 < date2.

Si quiere comparar con una resolución dada, intente date1.TotalMinutes == date2.TotalMinutes (esto comparado por el mismo minuto).

Si desea saber si la diferencia está dentro de cierto período de tiempo, utilice esto:

System.TimeSpan dt = date2.Subtract(date1); 
if (dt.TotalMinutes < 15) //... 
3

Puede utilizar

double minutes = d2.Subtract(d1).TotalMinutes; 

Para obtener la diferencia total en minutos.

1

No entiendo completamente lo que está preguntando.

Si desea que su pseudo-código que expresa en C# aquí va ...

 //date1 = 13/01/2004 12:20:00 
     DateTime dateTime1 = new DateTime(2004, 01, 13, 12, 20, 0); 
     //date2 = 13/01/2004 12:35:00 
     DateTime dateTime2 = new DateTime(2004, 01, 13, 12, 35, 0); 

     //get the time difference - result = Compare(date2-date1); 
     TimeSpan result = dateTime2 - dateTime1; 

     //output is 15 
     Console.WriteLine(result.TotalMinutes); 
1

¿Qué tal:

Timespan ts = date2 - date1; 
Console.WriteLine("Value of Minutes = ", ts.Minutes); 
0
DateTime date1 = DateTime.Now; 
DateTime date2 = DateTime.Now; 

var x = date1.CompareTo(date2); 

EDIT: Ahora veo que quería coger la diferencia de tiempo entre las dos fechas. Para eso, usa la clase TimeSpan.

0

Ahora esta es la mejor apuesta.

using System; 

public class Example 
{ 
    public static void Main() 
    { 
     DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0); 
     DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0); 
     int result = DateTime.Compare(date1, date2); 
     string relationship; 

     if (result < 0) 
     relationship = "is earlier than"; 
     else if (result == 0) 
     relationship = "is the same time as";   
     else 
     relationship = "is later than"; 

     Console.WriteLine("{0} {1} {2}", date1, relationship, date2); 
    } 
} 
// The example displays the following output: 
// 8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM 
0

En palabras de Larry Wall, hay más de una forma de hacerlo. Si está buscando el resultado -1, 0, +1 de una comparación dentro de un intervalo de tiempo determinado, pruebe una de estas variantes;

internal static int XDateCompare(DateTime date, DateTime other, int ticks) 
    { 
     var diff = date.Ticks - other.Ticks; 

     var result = Math.Abs(diff) <= ticks ? 0 
      : diff <= 0 ? -1 
      : 1; 

     Console.WriteLine("{0}\t{1}\t{2}\ts={3} milSec={4}", diff, other, result, ticks, date.Subtract(other).Duration().TotalMilliseconds); 

     return result; 
    } 

    internal static int XDateCompare(DateTime date, DateTime other, double milliseconds) 
    { 
     double diff = 
      date.Subtract(other) 
      .TotalMilliseconds; 

     var result = Math.Abs(diff) <= milliseconds ? 0 
      : diff <= 0 ? -1 
      : 1; 

     Console.WriteLine("result {0} diff {1} vs ms {2}", result, diff, milliseconds); 

     return result; 
    }