2009-07-15 10 views
10

Lavoro in C# utilizzando VisualStudio 2005 su Windows. Voglio trovare la data massima tra due date.Come trovare la data massima

Supponiamo:

From Date: 10-1-2009//Day-Month-YYYY 
To Date : 1-3-2009 

Voglio scrivere un metodo che restituisce che "A Data" è il più grande dei due.

+0

Si tratta ovviamente di una domanda compiti a casa. http://stackoverflow.com/questions/230510/homework-on-stackoverflow –

+1

@Adam un po 'meno ovvio data la versione originale. –

+0

Sto giudicando quello basato sulla semplicità dell'operazione, non sulla formulazione della domanda. L'hai reso molto più chiaro, ma sta praticamente chiedendo come usare gli operatori di confronto. Questo è programmare cose 101. –

risposta

2
public static DateTime WhichIsBigger(DateTime first, DateTime second) { 
    if(first > second) return first; 
    else return second; 
} 

o un vero 1-liner:

Func<DateTime, DateTime, DateTime> whichIsBigger = (f, s) => f > s ? f : s; 
+1

ahh, Visual Studio 2005. Qualcuno può far notare che il Func non funzionerà comunque: P –

57

Oh, andiamo, questo sta urlando di essere un one-liner

public static DateTime Max(DateTime a, DateTime b) { 
    return a > b ? a : b; 
} 
+6

+1 per "urlando per essere un one-liner" –

4

datetime memorizza classe punti nel tempo numericamente come valore intero a 64 bit chiamato tick. Un singolo segno di spunta rappresenta un centinaio di nanosecondi o un decimo di milionesimo di secondo. There are 10,000 ticks in a millisecond.

Dal DateTime è semplicemente un valore numerico, si può facilmente paragonare loro come si farebbe con qualsiasi due numeri usando i < o > operatori.

+0

Vedere la risposta di AgileJon: DateTime (e TimeSpan e DateTimeOffset) implement>, < , ecc., quindi non è necessario estrarre il valore sottostante. – Richard

+0

Non hai detto che devi, dando solo un piccolo background alla classe DateTime. –

+0

Non ha bisogno dello sfondo. Non ha nemmeno bisogno di un indizio. Se gli hai dato un indizio, non poteva leggerlo. –

14

Prova questo per la dimensione, non ha senso scrivere una routine Max mai più - usa i generici!

public T Max<T>(T value1, T value2) where T:IComparable 
{ 
    return value1.CompareTo(value2) > 0 ? value1 : value2; 
} 
3

È possibile utilizzare LINQ to Objects metodo di estensione Max come:

new [] {date1,date2,date3}.Max(); 
Problemi correlati