java - 年龄计算方法不能返回正确的年龄?

标签 java android

Possible Duplicate:
How do I calculate someone's age in Java?

我想计算用户年龄,如果出生月份等于当前月份并且出生日期小于或等于当前日期(如果用户输入他的年龄),我的方法不会给出正确的年龄通过日期选择器输入出生日期为 9/4/1990 或 4/4/1990 年龄将为 21 岁而不是 22 岁)我该如何解决这个问题?在这种情况下,我应该做什么更新才能获得正确的年龄?请帮助我....

这是我的方法

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;  
}

最佳答案

您的代码有两个问题:

  • 如果出生日期是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        
}

关于java - 年龄计算方法不能返回正确的年龄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10066633/

相关文章:

java - 带有子资源定位器的 Jersey 版本控制

android - Flutter:未处理的异常:断言失败: bool 表达式不能为null

java - RenderScript 在 Android Lollipop 中停止工作

android - 如何在线性布局中对齐图像垂直中心

android - u + 2714 chechmark在android中显示不同的形状和颜色

java - Jersey 在解析损坏的请求时抛出 NullPointerException

java - EclipseLink - 向 Postgres 添加索引

java - 未定义元素声明 'xs:schema'

java - 如何将 vec2&vec3 变量与 OpengL fragment 着色器绑定(bind)?

android - 如何在 Android Studio 中刷新行号旁边的图像?