2010-05-19 18 views
5

Voglio confrontare due dateTime.DateTime Confronta C#

Es:

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

risposta

11

Prova questo:

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

Un TimeSpan è sempre positivo? Quindi: date2.Subtract (date1) è uguale a: date1.Subtract (date2) ??? – Michiel

+1

@Michiel, no, il risultato sarà diverso, uno è un numero positivo (+15 minuti, +0,25 ore, +900000 tick) e un altro è negativo (-15 minuti, -0,25 ore, -900000 tick) – Artru

4

Come su

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

Per confrontare, si può semplicemente utilizzare il < dell'operatore: date1 < date2.

Se si desidera confrontare con una determinata risoluzione, provare date1.TotalMinutes == date2.TotalMinutes (questo rispetto per lo stesso minuto).

Se volete sapere se la differenza è entro un certo lasso di tempo, utilizzare questo:

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

È possibile utilizzare

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

Per ottenere la differenza totale in pochi minuti.

1

Non capisco perfettamente cosa stai chiedendo.

Se si desidera che il pseudo-codice che esprime in C# qui si 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

ne dite:

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: Vedo ora che si voleva ottenere la differenza di tempo tra le due date. Per questo si usa la classe TimeSpan.

0

Ora questa è la soluzione migliore.

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

Nelle parole di Larry Wall c'è più di un modo per farlo. Se stai cercando il risultato -1, 0, +1 di un confronto entro un certo intervallo di tempo, prova una di queste varianti;

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; 
    }