2016-04-25 49 views
1

私は作業中のJavaプロジェクトでのみを使用する必要があります。日付を表す日付オブジェクトとカレンダーオブジェクト。私が書いている方法では、日付は少なくとも過去数年間である必要があるので、現在と指定された日付またはカレンダーの間の年数を正確に計算する必要があります。私は正確にこの実装使用しての間の日数を計算するために管理している:私は今、正確に考慮閏年などを考慮しながら、これらの日付の間の年の数を計算する方法を見つけるのに苦労していますがうるう年を考慮した2つの日付オブジェクトまたはカレンダーオブジェクトの年数の計算

public static long daysSince(Date pastDate) { 
    long millisecondsSince = new Date().getTime() - pastDate.getTime(); 
    return TimeUnit.DAYS.convert(millisecondsSince, TimeUnit.MILLISECONDS); 
} 

を明らかに上記の方法の結果を365または365.25で除算することは、うまくいきません。私はjodaの時間パッケージとjava.timeを認識していますが、明示的にDateオブジェクトとCalendarオブジェクトを操作する必要があります。誰でもこれがどのようにできるか、できるだけ早くエレガントにできると考えていますか?あなた

EDITありがとう:それはあなたを助けるかもしれないこの単純な例を確認してください

答えて

2

私は(最終的には、次のコードを使用して所望の機能を実装することができました)ハシーブANSERのリンクからいくつかのアイデアを使用して:

public static int yearsSince(Date pastDate) { 
    Calendar present = Calendar.getInstance(); 
    Calendar past = Calendar.getInstance(); 
    past.setTime(pastDate); 

    int years = 0; 

    while (past.before(present)) { 
     past.add(Calendar.YEAR, 1); 
     if (past.before(present)) { 
      years++; 
     } 
    } return years; 
} 

予備試験は、このことから、正しい出力を取得しているようだが、私は、より広範なテストにまだきましたまあ。

+0

+1ループがないので私が比較しているものにより簡単かどうかわかりません私のコードを速く動かすべきである私のコード。しかし、あなたがソリューションを実装してうれしい – sebenalern

1

下記参照、機能して解決策を見つけるように見えた:

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class GetNumberOfYearsBetweenTwoDate { 

    public int getNumberOfYearsBetweenTwoDate(String strDate1, String dateFormat1, 
    String strDate2, String dateFormat2) { 
     int years = 0; 

     Date date1, date2 = null; 
     SimpleDateFormat sdf1 = new SimpleDateFormat(dateFormat1); 
     SimpleDateFormat sdf2 = new SimpleDateFormat(dateFormat2); 
     SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); 

     try { 
      date1 = (Date)sdf1.parse(strDate1); 
      date2 = (Date)sdf2.parse(strDate2); 

      int year1 = Integer.parseInt(sdfYear.format(date1)); 
      int year2 = Integer.parseInt(sdfYear.format(date2)); 

      years = year2 - year1; 
     } catch (ParseException ex) { 
      System.err.println(ex.getMessage()); 
     } 

     return years; 
    } 

    public static void main(String[] args) { 
     String strDate1 = "13-10-1988"; 
     String dateFormat1 = "dd-MM-yyyy"; 

     String strDate2 = "2011-10-13"; 
     String dateFormat2= "yyyy-MM-dd"; 

     GetNumberOfYearsBetweenTwoDate gnoybtd = new 
     GetNumberOfYearsBetweenTwoDate(); 
     int years = gnoybtd.getNumberOfYearsBetweenTwoDate(strDate1, dateFormat1, 
     strDate2, dateFormat2); 

     System.out.println("Number of Years: "+years+" Years"); 
    } 

} 
+0

ありがとうございますが、これは現在の日付の年の値から過去の日付の年の値を単に引くのではありませんか?すなわち、私は現在の2つの日付(2016-25-4)と過去の日付(2015-31-12)を持つことができます。あなたの方法では、これは2016-2015 = 1年が経過したときに計算されますが、実際には5ヶ月に満たない場合にのみ計算されます。私のプロジェクトでは、うるう年を考慮して、その日を過ぎた年数を計算することが不可欠です。しかし、ありがとう – transiti0nary

+0

この質問の答えを見て、貴重な助けを得るかもしれない:) http://stackoverflow.com/questions/2846135/how-do-i-calculate-the-number-of-years-difference -between-two-dates –

+0

ありがとうございました。リンクしたコードの一部を使用してソリューションを実装することができました。私は答えとしてそれを追加します。 – transiti0nary

関連する問題