2010-12-15 48 views
4

C#からOracle DBを呼び出すクエリがあります。私は、たいていの場合、5年前のデータを取得するためにクエリを書く必要があります。日付範囲... C#

私は現在public const int FIVE_YEARS_IN_DAYS = 1825;

ためのハードコーディングされた値を持っている。しかし、これは、うるう年の正しくありません。私に前の5年間の正しい日数を与える機能はありますか?

+0

年間365.25日を使用しないのはなぜですか? – PostMan

+1

@PostMan - それは必ずしも正確ではありません。私たちは4年ごとにうるう年を持っていません。時間を扱うことは、硬化してテストされたソリューションを使用する方がはるかに優れているプログラミング分野の1つです。噛むのは簡単です。 –

+0

@All ....入力いただきありがとうございます。非常に役に立ちます – MikeTWebb

答えて

6

私はあなたがこれをしたいと思う:

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

おそらく、この計算が夜中頃に実行されている可能性がある場合は、まずDateTime.Nowをキャプチャし、キャプチャした値を使用して計算を実行することを検討します。 – wageoghe

+0

私は@Matt Greerを正しいパスに置くことを望んでいましたが、良い点です。 –

+3

私は、 'DateTime.Today'が' DateTime.Now'よりも良い選択であると思います。 – Powerlord

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

これは、うるう年のために正しく占めることになります。これを行うと1,826日が得られます。

+0

@Babak Naffasの回答と同じコメントです。 DateTime.Nowをキャプチャする方が安全かもしれないし、キャプチャされた値を使って計算を実行するかもしれない。 – wageoghe

+0

ええ、それは正しいです。 'DateTime.Now'をキャプチャするのが一般的です。 –