2016-06-02 37 views
2

のJava APIによると、もしpublic boolean before(Date when)Javaの日付の比較

真の場合のみ オブジェクトは厳密に早くときに代表される瞬間よりも、この日付で表される時間の瞬間。偽 です。

は今、私はユーザーによる日付入力が現在の日付より大きいかどうかを確認する必要があり、その後にのみ、入力そうでない場合はスロー例外を受け付けますので、私は

if(userInputDate.before(new Date())){ 
     throw new Exception("Some Message"); 
    } 

の下にしようとしたが、両方の日付も同じであればそれは内部ifステートメントに行く。それは時間を計算し、日付を比較するよりもむしろチェックすることを意味しますか?はいの場合は、問題の解決方法を教えてください。

これを確認する方法を教えてください。

+1

:ここ

は、あなたがそれを行うことができる2つの方法があります。 (両方の値は、タイムゾーンに依存しません. – zapl

+0

)Date.before(Date t)メソッドを使用すると、ミリ秒を含むすべての日付パラメータがチェックされます。 'new Date()'を使用して日付を作成した場合、現在の時刻(ほぼ正確にはミリ秒)を使って新しい日付を作成するので、両方の日付が等しい可能性はほとんどありません。だから、あなたの場合、私はあなたをsuggetするでしょう(@zaplが言ったように) - 代わりに 'System.currentTimeMillis()'。 – AsafSavich

+0

'Date'クラスにはミリ秒も含まれているからです。次に、 'userInputDate'と' new Date() 'を比較すると、最初のものが2番目のものより前にある可能性が厳密にあります。 –

答えて

1

クラスDateのメソッドbeforeは、日付の間のミリ秒を比較しているため、唯一の日ではなく、時刻を比較しています。

あなたは、日付が同じ日にない、あなたが古いのではなく、Java8で新しいタイムAPIを使用することができます場合は、最初の日付が二1

public static boolean isBeforeDate(Date date1, Date date2) {  
    SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd"); 
    boolean areTheSameDay = fmt.format(date1).equals(fmt.format(date2)); 
    return !areTheSameDay && date1.before(date2); 
} 

前にあるかどうかを確認する方法を作成することができます1年の日からその日の時間を分離することができjava.util.Date上のすべてのメソッドは推奨されている

boolean isBefore = myLocalDate.compareTo(myOtherLocalDate) < 0 
+0

私はJava7を使用しています。 –

+0

次に、 'Date'クラスには、あなたが必要とするものを正確に行うメソッドがありません。あなたは日を比較するために余分な仕事をする必要があります。 –

0

Dateクラスは、クラスLocalDateとメソッドcompareToを使用することができます。したがって、java.util.Calendarを使用する方が良いです。さらに、夏時間が終わる2日のうちに、典型的には毎年1時間があると考えるべきである。あなたは `場合(userInputDate.getTime()<のSystem.currentTimeMillis())`あなたが理解するのに役立ちます場合に相当しなければならないもの

public static boolean isBeforeDay(Date date1, Date date2) { 
    // convert date1 to noon on the same day 
    Calendar day1 = Calendar.getInstance(TimeZone.getDefault()); 
    day1.setTime(date1); 
    day1.set(Calendar.HOUR_OF_DAY, 12); 
    day1.set(Calendar.MINUTE, 0); 
    day1.set(Calendar.SECOND, 0); 
    day1.set(Calendar.MILLISECOND, 0); 

    // convert date2 to noon on the same day 
    Calendar day2 = Calendar.getInstance(TimeZone.getDefault()); 
    day2.setTime(date2); 
    day2.set(Calendar.HOUR_OF_DAY, 12); 
    day2.set(Calendar.MINUTE, 0); 
    day2.set(Calendar.SECOND, 0); 
    day2.set(Calendar.MILLISECOND, 0); 

    return day1.before(day2); 
} 


public static boolean isBeforeDay(Date date1, Date date2) { 
    // get yyyymmdd value from date1 
    Calendar day1 = Calendar.getInstance(TimeZone.getDefault()); 
    day1.setTime(date1); 
    int ymd1 = 10000*day1.get(Calendar.YEAR) + 100*day1.get(Calendar.MONTH) + day1.get(Calendar.DAY_OF_MONTH); 

    // get yyyymmdd value from date2 
    Calendar day2 = Calendar.getInstance(TimeZone.getDefault()); 
    day2.setTime(date2); 
    int ymd2 = 10000*day2.get(Calendar.YEAR) + 100*day2.get(Calendar.MONTH) + day2.get(Calendar.DAY_OF_MONTH); 

    return ymd1 < ymd2; 
}