Java 如何在android中计算一个人从出生日期算起的确切年龄

Java 如何在android中计算一个人从出生日期算起的确切年龄,java,android,Java,Android,如果以上是条件,那么我想打印26作为当前年龄。 第二个示例:出生日期:25-07-1991ddmmyyy 当前日期:2017年1月10日 如果以上是条件,那么我想打印25作为当前年龄 请帮帮我 下面是我尝试过的代码 First example: birthdate :10-01-1991(ddmmyyyy) CurrentDate :10-01-2017 }试试这个 private int calculateage(Integer day1, Inte

如果以上是条件,那么我想打印26作为当前年龄。 第二个示例:出生日期:25-07-1991ddmmyyy 当前日期:2017年1月10日 如果以上是条件,那么我想打印25作为当前年龄

请帮帮我

下面是我尝试过的代码

  First example: birthdate :10-01-1991(ddmmyyyy) 
                 CurrentDate :10-01-2017 
}试试这个

private int calculateage(Integer day1, Integer month1, Integer year1)
{
Calendar birthCal = new GregorianCalendar(1991, 01, 10);

Calendar nowCal = new GregorianCalendar();

age = nowCal.get(Calendar.YEAR) - birthCal.get(Calendar.YEAR);
boolean isMonthGreater = birthCal.get(Calendar.MONTH) >= nowCal
        .get(Calendar.MONTH);

boolean isMonthSameButDayGreater = birthCal.get(Calendar.MONTH) >= nowCal.get(Calendar.MONTH)
        && birthCal.get(Calendar.DAY_OF_MONTH) >= nowCal
                .get(Calendar.DAY_OF_MONTH);

if (age < 18) {
    Age = age;
}
else if (isMonthGreater || isMonthSameButDayGreater) {
    Age = age - 1;
}
return Age;
从中找到解决方案

希望能帮助你

根据的参考,使用以下期间类:

private 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;  
}
希望它能解决您的问题。

使用Joda Library:

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);

//Now access the values as below
System.out.println(period.getDays());
System.out.println(period.getMonths());
System.out.println(period.getYears());
LocalDate birthdate = new LocalDate (1970, 1, 20);
LocalDate now = new LocalDate();
Years age = Years.yearsBetween(birthdate, now);
没有图书馆:

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(1960, Month.JANUARY, 1);

Period p = Period.between(birthday, today);

//Now access the values as below
System.out.println(period.getDays());
System.out.println(period.getMonths());
System.out.println(period.getYears());
LocalDate birthdate = new LocalDate (1970, 1, 20);
LocalDate now = new LocalDate();
Years age = Years.yearsBetween(birthdate, now);
}试试这个

public static int getAge(String date) {

int age = 0;
try {
    Date date1 = dateFormat.parse(date);
    Calendar now = Calendar.getInstance();
    Calendar dob = Calendar.getInstance();
    dob.setTime(date1);
    if (dob.after(now)) {
        throw new IllegalArgumentException("Can't be born in the future");
    }
    int year1 = now.get(Calendar.YEAR);
    int year2 = dob.get(Calendar.YEAR);
    age = year1 - year2;
    int month1 = now.get(Calendar.MONTH);
    int month2 = dob.get(Calendar.MONTH);
    if (month2 > month1) {
        age--;
    } else if (month1 == month2) {
        int day1 = now.get(Calendar.DAY_OF_MONTH);
        int day2 = dob.get(Calendar.DAY_OF_MONTH);
        if (day2 > day1) {
            age--;
        }
    }
} catch (ParseException e) {
    e.printStackTrace();
}
return age ;

使用以下代码段计算年龄:

private String getAge(int year, int month, int day) {
    //calculating age from dob
    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--;
    }
    return age;
}

这将是从给定日期开始计算年龄的每个条件的合适方法-

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

public class AgeCalculator {

    public static int calculateAge(Date birthdate) {
        Calendar birth = Calendar.getInstance();
        birth.setTime(birthdate);
        Calendar today = Calendar.getInstance();

        int yearDifference = today.get(Calendar.YEAR)
                - birth.get(Calendar.YEAR);

        if (today.get(Calendar.MONTH) < birth.get(Calendar.MONTH)) {
            yearDifference--;
        } else {
            if (today.get(Calendar.MONTH) == birth.get(Calendar.MONTH)
                    && today.get(Calendar.DAY_OF_MONTH) < birth
                            .get(Calendar.DAY_OF_MONTH)) {
                yearDifference--;
            }

        }

        return yearDifference;
    }

    public static void main(String[] args) throws ParseException {
        // date format dd-mm-yyyy
        String birthdateStr = "11-01-1991";
        SimpleDateFormat df = new SimpleDateFormat("dd-mm-yyyy");
        Date birthdate = df.parse(birthdateStr);
        System.out.println(AgeCalculator.calculateAge(birthdate));

    }
}
主要活动

public static String getAge(int year, int month, int day) 
{

 Calendar dob = Calendar.getInstance();

 Calendar today = Calendar.getInstance();

dob.set(year, month, day);

int today_m = today.get(Calendar.MONTH);

int dob_m = dob.get(Calendar.MONTH);

int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);

if (dob_m > today_m) 
{

age--;
} 
else if (dob_m == today_m) 
{

int day_today = today.get(Calendar.DAY_OF_MONTH);

int day_dob = dob.get(Calendar.DAY_OF_MONTH);
if (day_dob > day_today) {
age--;}

}
return age+"";
}
我在日历中设置给定的日期,并将年、日和月发送给getAge方法。
您可以根据需要更改日期格式。

我知道这已经是一个老问题,但日期计算总是回到讨论中

这是我实际用于获取两个日期之间的确切年份的方法:

public SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");

Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf2.parse("2000-03-21"));

String age=Util.getAge(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE));
-编辑

使用JDK 8更容易获得日期之间的年差:

但在Android JAVA中,这只适用于API 26+,因此最好基于SDK版本使用这两种方法:

public static String getYear(Date value) {
    LocalDate date = value.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
    int year = Period.between(date, LocalDate.now()).getYears();

    return year > 0 ? Integer.toString(year) : "0";
}

检查Kotlin中的android:

public static String getYear(Date value) {
    int year;

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        LocalDate date = value.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        year = Period.between(date, LocalDate.now()).getYears();
    } else {
        Calendar date = Calendar.getInstance();
        Calendar today = Calendar.getInstance();

        date.setTime(value);

        /* get raw year between dates */
        year = today.get(Calendar.YEAR) - date.get(Calendar.YEAR);

        /* calculate exact year */
        if (
                (date.get(Calendar.MONTH) > today.get(Calendar.MONTH)) ||
                (date.get(Calendar.MONTH) == today.get(Calendar.MONTH) && date.get(Calendar.DATE) > today.get(Calendar.DATE))
        ) {
            year--;
        }
    }

    return year > 0 ? Integer.toString(year) : "0";
}

在这里,我将年龄计算为年/月/日,这可以准确地解决您的问题

输入来自日期选择器

看看这个代码


使用杰克沃顿图书馆。因为它易于使用,并且提供了非常棒的功能

实施

首先,实现年龄模型类:

    public void onClick(View v) {
        int sday=d1.getDayOfMonth();
        int smonth=d1.getMonth();
        int syear=d1.getYear();

        int eday=d2.getDayOfMonth();
        int emonth=d2.getMonth();
        int eyear=d2.getYear();

            //calculating year
            resyear = eyear - syear;

            //calculating month
            if (emonth >= smonth) {
                resmonth = emonth - smonth;
            } else {
                resmonth = emonth - smonth;
                resmonth = 12 + resmonth;
                resyear--;
            }

            //calculating date
            if (eday >= sday) {
                resday = eday - sday;
            } else {
                resday = eday - sday;
                resday = 31 + resday;
                if (resmonth == 0) {
                    resmonth = 11;
                    resyear--;
                } else {
                    resmonth--;
                }
            }

            //displaying error if calculated age is negative
            if (resday <0 || resmonth<0 || resyear<0) {
                Toast.makeText(getApplicationContext(), "Current Date must be greater than Date of Birth", Toast.LENGTH_LONG).show();
                t1.setText("Current Date must be greater than Date of Birth");
            }
            else {
                t1.setText("Age: " + resyear + " years /" + resmonth + " months/" + resday + " days");
            }
        }
第二,一些功能性的东西:

此函数将验证日期,如不大于今天的日期,但如果要更改最大范围,也可以在currentDate参数中传递日期。其次,它还将检查这些日期:2月30日、6月31日,并返回null。。等等


兄弟,我尝试过你的方法示例:我选择了10-01-1991 frm calendar int month1=now.getCalendar.MONTH,我想在int month1中得到int=1,对吗??但是我得到int=0如果我在代码中的任何地方出错,那么请提前告诉我thanx。这是因为android日历,日历中有一个数组包含月份名称,所以月份从0开始,如一月->0,二月->1,等等…您忘记指定日期格式:SimpleDataFormat dateFormat=new SimpleDataFormatDD MM yyyy;仅适用于API 26+
data class AgeModel(val day: Int, val month: Int, val year: Int)
private fun getDate(year: Int, month: Int, day: Int): LocalDate? {
        return try {
            run { LocalDate.of(year, month, day) }
        } catch (e: DateTimeException) {
            null
        }
    }

fun getCalculatedAge(currentDate: LocalDate = LocalDate.now(), year: Int, month: Int, day: Int): AgeModel? {

        var curdate = currentDate.dayOfMonth
        var curmonth = currentDate.monthValue
        var curyear = currentDate.year

        val calculateDate = getDate(year, month, if (day == 0) curdate else day)
                ?: return null

        if (calculateDate > currentDate) return null

        if (day > curdate) {
            curmonth -= 1
            curdate += calculateDate.lengthOfMonth()
        }

        if (month > curmonth) {
            curyear -= 1
            curmonth += 12
        }
        return AgeModel(curdate - day, curmonth - month, curyear - year)
    }