2011-06-18 11 views
4

私は昨日と今日どのようにJava日付の日を比較するには?

if (yesterday.before(today)) { 
... 
} 

問題間の単純な日付の比較をやろうとしているが、それはほんの数秒の差だ場合でも、前の方法で、私は本当のためにevalするということです。私はそれが前日だった(分/秒を無視する必要がある場合は、これをtrueにevalにしたいので、どのように私は(ちょうど日比較可能性がある)

DateUtils使用して、事前

+0

java.util.Dateまたはjava.util.Calendarの日付を比較します。 – mKorbel

+3

標準APIを使用してこれを行う簡単な方法はありません。何らかの理由で(Loboごとに)何らかの理由でコモンズランを使用できない場合は、各日付をエポックからの日数に変換することをおすすめします(つまり、 'millisSinceEpoch/MILLIS_IN_DAY')。 – OpenSauce

答えて

12

にありがとう -

if (!DateUtils.isSameDay(yesterday, today) && (yesterday.before(today)) { 
    //... 
} 

EDIT:。それは同様DateUtilsなしで行うことができるthisスレッドを参照してください

+0

すごい!このレポのアーティファクトIDは何ですか?mvnを使用して追加できますか? –

+0

@Toran Billups - Google検索が「 commons-lang」になっているかどうかわかりません。 Mavenと一緒に働いたことはありません。 – Lobo

+1

他の人のために、このURLはmavenにcommons-langを追加するのに役立ちましたhttp://mvnrepository.com/artifact/commons-lang/commons-lang/2.3 –

5

次のようなメソッドを実装するサードパーティのライブラリを使用しない場合:。

public boolean before(Calendar yesterday, Calendar today) { 
    if(yesterday == today) return false; 
    if(yesterday == null || today == null) return false; 
    return yesterday.get(Calendar.YEAR) < today.get(Calendar.YEAR) ? true : 
     yesterday.get(Calendar.YEAR) == today.get(Calendar.YEAR) && yesterday.get(Calendar.DAY_OF_YEAR) < today.get(Calendar.DAY_OF_YEAR); 
} 
3

Dateに固定したい場合は、一時的に現在の日付を1日下げることができます。 before()が依然として同じ結果につながる場合は、少なくとも1日のタイムスパンがあります。

final static long DAY_MILLIS = 86400000; 

Date d1 = new Date(2011, 06, 18); 
Date d2 = new Date(2011, 06, 16); 

Date temp = new Date(d1.getTime() - DAY_MILLIS); 

if (temp.before(d2)) 
    // Do stuff 
} 

私は廃止予定のコンストラクタを使用しましたが、そのジョブを実行する必要があります。

4

標準のJavaライブラリよりも日付を処理するライブラリを追加する場合は、Jodaを参照してください。

ジョダを使用すると、によって日の間の差異を計算することができます

Days d = Days.daysBetween(startDate, endDate); 
    int days = d.getDays(); 

どこstartDateendDate日付、DateTime(その実際にスーパークラス)のジョダバージョンです。

オブジェクトはコンストラクタ呼び出しによって行うことができるジョダDateTimeへのJava Dateオブジェクトの変換:このライブラリを追加する

DateTime dateTime = new DateTime(javaDate); 

は、この特定の問題のためにやり過ぎかもしれないが、あなたは、日付と時刻の操作で多くのことを扱う場合には、図書館はそれにふさわしい価値があります。