2

重複の可能性:
Java で誰かの年齢を計算するにはどうすればよいですか?

ユーザーの年齢を計算したいのですが、生年月日が現在の月と等しく、生年月日が現在の日付以下の場合、私の方法では正しい年齢が得られません (ユーザーが生年月日を入力した場合)日付ピッカーが 1990 年 9 月 4 日または 1990 年 4 月 4 日である場合、年齢は 22 ではなく 21 になります) どうすればこの問題を解決できますか? この場合、正しい年齢を取得するにはどうすればよいですか? 私を助けてください ....

これが私の方法です

public static  String getAge(int year,int month,int day) {
    Calendar dob = Calendar.getInstance(); 
    Calendar today = Calendar.getInstance();

    dob.set(year, month, day); 
    int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);

    if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)){
        age--; 
    }
    Integer ageInt = new Integer(age);
    String ageS = ageInt.toString();

    return ageS;  
}
4

2 に答える 2

4

コードには 2 つの問題があります。

  • 生年月日が 1990 年 4 月 9 日の場合は、dob.set(1990,3,9)月が 0 から始まるように書く必要があります ==> おそらく必要ですdob.set(year, month - 1, day);
  • 現在の年が閏年で生年ではなく (またはその逆)、日付が 2 月 28 日または 29 日より後の場合、同じ日付に 1 日差が生じます。

これは機能しているように見えますが、さまざまなシナリオでテストし、結果に満足していることを確認する必要があります。

public static String getAge(int year, int month, int day) {
    Calendar dob = Calendar.getInstance();
    Calendar today = Calendar.getInstance();


    dob.set(year, month - 1, day);

    int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
    if (today.get(Calendar.MONTH) < dob.get(Calendar.MONTH)) {
        age--;
    } else if(today.get(Calendar.MONTH) == dob.get(Calendar.MONTH)) {
        if (today.get(Calendar.DAY_OF_MONTH) < dob.get(Calendar.DAY_OF_MONTH)) {
            age--;
        }
    }

    Integer ageInt = new Integer(age);
    String ageS = ageInt.toString();

    return ageS;

}

そして(非常に単純化された)テスト:

public static void main(String[] args) { //today = 8 April 2012
    System.out.println(getAge(1990,3,7)); //22
    System.out.println(getAge(1990,3,8)); //22
    System.out.println(getAge(1990,3,9)); //22
    System.out.println(getAge(1990,4,7)); //22
    System.out.println(getAge(1990,4,8)); //22
    System.out.println(getAge(1990,4,9)); //21
    System.out.println(getAge(1990,5,7)); //21        
    System.out.println(getAge(1990,5,8)); //21        
    System.out.println(getAge(1990,5,9)); //21        
}
于 2012-04-08T21:31:43.470 に答える
-2

たとえば、両方の日付をミリ秒単位で変換し、Date オブジェクトよりも変換することで、差を計算できます。コードは次のようになります。

long ageMilis = today.getTimeInMillis() - dob.getTimeInMillis();
Date age = new Date(ageMilis);
return age.toString();
于 2012-04-08T21:35:16.167 に答える