2015-12-01 7 views
21

日付が10年以上20年以下の場合は、Java 8をチェックインしようとしています。私はDate.before()Date.after()を使用しており、引数としてcurrentDate-10年とcurrentDate-20年を引数として使用しています。日付が10年以上20年以下であることを確認してください

誰かが、私のbefore()after()の方法でそれを渡すために日付の書式で10歳と20歳の日付を取得する最もクリーンな方法を提案できますか?

+0

を私は(/後にする前に、日付を使ったことがない)、この約100%わからないんだけど、あなたは今日に初期化の日付と比較して試してみましたこれに関連して別の2つの日付(10年前と20年前)を設定し、それらの方法を使用しますか? – Foleosy

+1

heres a good read:http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html – Stultuske

+1

http://stackoverflow.com/questions/883060/how-cani-i- date-between-between-between-between-between-dates-in-java – Stefan

答えて

11

Calendarを使用すると、現在の日付から10歳の日付と20歳の日付を簡単に取得できます。あなたは、Java 8を使用していると

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.YEAR, -10); 
Date d1 = calendar.getTime(); 
calendar.add(Calendar.YEAR, -10); 
Date d2 = calendar.getTime(); 

あなたはまた、あなたが言ったように、あなたがdate.after()date.before()メソッドを使用することができ、比較のためにLocalDate

LocalDate currentDate = LocalDate.now(); 
    Date d1 = Date.from(currentDate.minusYears(10).atStartOfDay(ZoneId.systemDefault()).toInstant()); 
    Date d2 = Date.from(currentDate.minusYears(20).atStartOfDay(ZoneId.systemDefault()).toInstant()); 

を使用することができます。

if(date.after(d1) && date.before(d2)){ //date is the Date instance that wants to be compared 
     //// 
    } 

before()after()方法があまりにもCalendarLocalDateに実装されています。これらのメソッドをjava.util.Dateインスタンスに変換せずにインスタンス内で使用できます。

+8

これはJava 8で動作しますが、新しい日付と時刻のAPIを使用することをお勧めします。 – SpaceTrucker

+2

LocalDateを使用している場合は、Dateに戻す必要はありません。 – assylias

+1

私はOPで 'Date.after()'と 'Date.before()'メソッドを使用したいと思っていました –

28

これを行うにはjava.time.LocalDateを使用できます。 例:あなたは2005年1月1日は、その期間の間にあるかどうかを確認する必要がある場合は、

LocalDate date = LocalDate.of(2005, 1, 1); // Assign date to check 
if(date.isBefore(today.minusYears(10)) && date.isAfter(today.minusYears(20))) 
    //Do Something 
+2

私は自由の@SpaceTruckerが提起した問題に対処するための別の変数を作成する。あなたが望むならば、元気に戻ってください。また、この答えは* time *と* time zone *の問題を無視することに注意してください。私はおそらくatStartOfDayを使って時間を切り捨てるでしょう。タイムゾーンの処理は特定のユースケースに依存します。 – jpmc26

4

別の可能性を確認するための日付と上の日付の間に年の数を取得することです使用することができます。年数が0より大きく10未満の場合は、チェックする日付が10年より長く、20年よりも新しいことを意味します。

このコードは、インターバル]now - 20 years ; now - 10 years[で任意の日付を決定します:

public static void main(String[] args) { 
    LocalDate dateToCheck = LocalDate.now().minusYears(20).plusDays(1); 

    LocalDate upperYear = LocalDate.now().minusYears(10); 
    long yearCount = ChronoUnit.YEARS.between(dateToCheck, upperYear); 
    if (yearCount > 0 && yearCount < 10) { 
     System.out.println("date is older than 10 years and newer than 20 years"); 
    } 
} 
+2

私は 'long l = LocalDate.now()。until(dateToCheck、ChronoUnit.YEARS);を使います。 if(l <=-10 && l> -20) 'タスクが「年齢がその間隔内にあるかどうかをチェックする」場合。しかしあなたの答えは、実際の仕事の代わりに「前」と「後」を使うことに焦点を当てた質問のXYスタイルに間違いがない唯一の答えです。 'x.until(y、YEARS)'は 'YEARS.between(x、y)'と同じですが、後者は前者に委譲することに注意してください。 – Holger

+1

@Holgerしかし、細かいところがありますが、これは ''今 - 20年の間隔をチェックします。今 - 10年]」(上部の包括的な境界に注意)。しかし、OPは、境界が含まれるべきかどうかを言わなかった。 – Tunaki

+1

さて、 '>'や '> =' respという演算子を選ぶことができます。あなたが好きなように '<'または '<='でも、中間の 'LocalDate'インスタンスは必要ありません。 – Holger

関連する問題