2009-07-15 18 views
10

Ich arbeite in C# mit VisualStudio 2005 unter Windows. Ich möchte das maximale Datum zwischen zwei Daten finden.So finden Sie Max Date

Angenommen:

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

Ich möchte ein Verfahren schreiben, dass "To Date" zurückgibt, ist die größere der beiden.

+0

Dies ist natürlich eine Hausaufgaben Frage. http://StackOverflow.com/Questions/230510/Homework-on-StackOverflow –

+1

@Adam etwas weniger offensichtlich angesichts der ursprünglichen Version. –

+0

Ich beurteile das basierend auf der Einfachheit der Operation, nicht den Wortlaut der Frage. Du hast es viel klarer gemacht, aber er fragt im Grunde, wie man Vergleichsoperatoren benutzt. Das ist Programmieren von Zeug 101. –

Antwort

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

Oder ein echter 1-liner:

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

ahh, Visual Studio 2005. Nun kann jemand darauf hinweisen, dass die Func dort sowieso nicht arbeiten: P –

57

Ach komm, das man schreit einen Einzeiler

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

+1 für "schreiend ein One-Liner sein" –

4

Die Datetime-Klasse speichert Zeitpunkt wurde numerisch als 64-Bit-Integer-Wert, der als Tick bezeichnet wird. Ein einzelner Tick entspricht hundert Nanosekunden oder einem Zehnmillionstel einer Sekunde. There are 10,000 ticks in a millisecond.

Da DateTime ist einfach ein numerischer Wert, Sie können sie leicht vergleichen, wie Sie es zwei beliebige Zahlen mit den < oder > Betreiber.

+0

Siehe AgileJon Antwort: DateTime (und TimeSpan und DateTimeOffset) implementieren>, < usw. Es ist also nicht notwendig, den zugrunde liegenden Wert zu extrahieren. – Richard

+0

Ich habe nicht gesagt, dass Sie müssen, geben Sie nur ein wenig Hintergrundinformationen über die DateTime-Klasse. –

+0

Er benötigt den Hintergrund nicht. Er braucht nicht einmal eine Ahnung. Wenn Sie ihm einen Hinweis gaben, konnte er es nicht lesen. –

14

Probieren Sie dies für die Größe, keinen Punkt beim Schreiben einer Max Routine immer wieder - Generika verwenden!

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

können Sie verwenden Linq to Objects-Extension-Methode Max wie:

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