2010-12-15 6 views
4

Ich habe eine Abfrage, die eine Oracle DB von C# aufruft. Ich möchte die Abfrage schreiben, um Daten zu erhalten, die höchstens 5 Jahre alt sind.Datumsbereich in Tagen .... C#

Im Moment habe ich einen harten codierten Wert für public const int FIVE_YEARS_IN_DAYS = 1825;

Aber dies ist wegen der Schaltjahre nicht korrekt. Gibt es eine Funktion, die mir die richtige Anzahl von Tagen in den vorangegangenen 5 Jahren gibt?

+0

Warum 365,25 Tage pro Jahr nicht verwenden? – PostMan

+1

@PostMan - das ist nicht immer genau. Wir haben keine Schaltjahre alle 4 Jahre. Der Umgang mit der Zeit ist ein Bereich in der Programmierung, wo es viel besser ist, eine gehärtete, getestete Lösung zu verwenden. Es ist leicht, gebissen zu werden. –

+0

@All .... danke für die Eingabe. Sehr hilfreich – MikeTWebb

Antwort

6

Ich glaube, Sie dies wünschen:

DateTime now = DateTime.Now;  
now.AddYears(-5).Subtract(now).Days 
+3

Um das möglicherweise unwahrscheinliche Ereignis dieser Berechnung, die um Mitternacht ausgeführt wird, zu erfassen, könnten Sie in Erwägung ziehen, zuerst DateTime.Now zu erfassen und dann die Berechnung mit dem erfassten Wert durchzuführen. – wageoghe

+0

Ich hatte gehofft, @Matt Greer auf den richtigen Weg zu bringen, aber guter Punkt. –

+3

Ich würde denken, dass 'DateTime.Today' eine bessere Wahl wäre als' DateTime.Now'. – Powerlord

4
DateTime now = DateTime.Now; 
TimeSpan fiveYears = now.Subtract(now.AddYears(-5)); 
int numberOfDaysInLastFiveYears = fiveYears.Days; 

Dies wird für Schaltjahre richtig erklären. Wenn Sie dies jetzt tun, ergeben sich 1.826 Tage.

+0

Gleicher Kommentar wie ich zu @Babak Naffas Antwort gemacht habe. Wahrscheinlich sicherer, DateTime.Now zu erfassen und den erfassten Wert für die Berechnung zu verwenden. – wageoghe

+0

Ja, das ist richtig. Die Aufnahme von 'DateTime.Now' im Allgemeinen ist eine gute Übung. –