How do I calculate someone's age in Java?

前端 未结 28 2303
渐次进展
渐次进展 2020-11-22 02:20

I want to return an age in years as an int in a Java method. What I have now is the following where getBirthDate() returns a Date object (with the birth date ;-)):



        
相关标签:
28条回答
  • 2020-11-22 03:14

    Here is the java code to calculate age in year, month and days.

    public static AgeModel calculateAge(long birthDate) {
        int years = 0;
        int months = 0;
        int days = 0;
    
        if (birthDate != 0) {
            //create calendar object for birth day
            Calendar birthDay = Calendar.getInstance();
            birthDay.setTimeInMillis(birthDate);
    
            //create calendar object for current day
            Calendar now = Calendar.getInstance();
            Calendar current = Calendar.getInstance();
            //Get difference between years
            years = now.get(Calendar.YEAR) - birthDay.get(Calendar.YEAR);
    
            //get months
            int currMonth = now.get(Calendar.MONTH) + 1;
            int birthMonth = birthDay.get(Calendar.MONTH) + 1;
    
            //Get difference between months
            months = currMonth - birthMonth;
    
            //if month difference is in negative then reduce years by one and calculate the number of months.
            if (months < 0) {
                years--;
                months = 12 - birthMonth + currMonth;
            } else if (months == 0 && now.get(Calendar.DATE) < birthDay.get(Calendar.DATE)) {
                years--;
                months = 11;
            }
    
            //Calculate the days
            if (now.get(Calendar.DATE) > birthDay.get(Calendar.DATE))
                days = now.get(Calendar.DATE) - birthDay.get(Calendar.DATE);
            else if (now.get(Calendar.DATE) < birthDay.get(Calendar.DATE)) {
                int today = now.get(Calendar.DAY_OF_MONTH);
                now.add(Calendar.MONTH, -1);
                days = now.getActualMaximum(Calendar.DAY_OF_MONTH) - birthDay.get(Calendar.DAY_OF_MONTH) + today;
            } else {
                days = 0;
                if (months == 12) {
                    years++;
                    months = 0;
                }
            }
        }
    
        //Create new Age object
        return new AgeModel(days, months, years);
    }
    
    0 讨论(0)
  • 2020-11-22 03:14
    public int getAge(String birthdate, String today){
        // birthdate = "1986-02-22"
        // today = "2014-09-16"
    
        // String class has a split method for splitting a string
        // split(<delimiter>)
        // birth[0] = 1986 as string
        // birth[1] = 02 as string
        // birth[2] = 22 as string
        // now[0] = 2014 as string
        // now[1] = 09 as string
        // now[2] = 16 as string
        // **birth** and **now** arrays are automatically contains 3 elements 
        // split method here returns 3 elements because of yyyy-MM-dd value
        String birth[] = birthdate.split("-");
        String now[] = today.split("-");
        int age = 0;
    
        // let us convert string values into integer values
        // with the use of Integer.parseInt(<string>)
        int ybirth = Integer.parseInt(birth[0]);
        int mbirth = Integer.parseInt(birth[1]);
        int dbirth = Integer.parseInt(birth[2]);
    
        int ynow = Integer.parseInt(now[0]);
        int mnow = Integer.parseInt(now[1]);
        int dnow = Integer.parseInt(now[2]);
    
        if(ybirth < ynow){ // has age if birth year is lesser than current year
            age = ynow - ybirth; // let us get the interval of birth year and current year
            if(mbirth == mnow){ // when birth month comes, it's ok to have age = ynow - ybirth if
                if(dbirth > dnow) // birth day is coming. need to subtract 1 from age. not yet a bday
                    age--;
            }else if(mbirth > mnow){ age--; } // birth month is comming. need to subtract 1 from age            
        }
    
        return age;
    }
    
    0 讨论(0)
  • 2020-11-22 03:15

    With the date4j library :

    int age = today.getYear() - birthdate.getYear();
    if(today.getDayOfYear() < birthdate.getDayOfYear()){
      age = age - 1; 
    }
    
    0 讨论(0)
  • 2020-11-22 03:15

    Try to copy this one in your code, then use the method to get the age.

    public static int getAge(Date birthday)
    {
        GregorianCalendar today = new GregorianCalendar();
        GregorianCalendar bday = new GregorianCalendar();
        GregorianCalendar bdayThisYear = new GregorianCalendar();
    
        bday.setTime(birthday);
        bdayThisYear.setTime(birthday);
        bdayThisYear.set(Calendar.YEAR, today.get(Calendar.YEAR));
    
        int age = today.get(Calendar.YEAR) - bday.get(Calendar.YEAR);
    
        if(today.getTimeInMillis() < bdayThisYear.getTimeInMillis())
            age--;
    
        return age;
    }
    
    0 讨论(0)
提交回复
热议问题