Android 计算年龄不准确

Android 计算年龄不准确,android,Android,我想更新用户年龄当计算年龄大于当前年龄时,它将更新数据库。 这是一段计算年龄的代码,但并不准确 我正在通过SharedReferences检索dob,它是: 27-07-1993年龄应该是27岁,但打印出来的是26岁。 有没有办法让它精确计算?提前谢谢 private int getAge(){ String userDob = SharedPrefManager.getUserDob(); Date date = null; Simple

我想更新用户年龄当计算年龄大于当前年龄时,它将更新数据库。 这是一段计算年龄的代码,但并不准确

我正在通过SharedReferences检索dob,它是: 27-07-1993年龄应该是27岁,但打印出来的是26岁。 有没有办法让它精确计算?提前谢谢

    private int getAge(){
        String userDob = SharedPrefManager.getUserDob();
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
        try {
            date = sdf.parse(userDob);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if(date == null) return 0;

        Calendar dob = Calendar.getInstance();
        Calendar today = Calendar.getInstance();

        dob.setTime(date);

        int year = dob.get(Calendar.YEAR);
        int month = dob.get(Calendar.MONTH);
        int day = dob.get(Calendar.DAY_OF_MONTH);

        dob.set(year, month+1, 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--;
        }
        Log.i(CalcAge, "my age " + age);
        return age;
    }
private int getAge(){
字符串userDob=SharedPrefManager.getUserDob();
日期=空;
SimpleDataFormat sdf=新的SimpleDataFormat(“dd-MM-yyyy”);
试一试{
date=sdf.parse(userDob);
}捕获(解析异常){
e、 printStackTrace();
}
if(date==null)返回0;
Calendar dob=Calendar.getInstance();
Calendar today=Calendar.getInstance();
目标设定时间(日期);
int year=dob.get(日历年);
int month=dob.get(日历月);
int day=dob.get(日历日/月);
日期设置(年、月+1、日);
int age=today.get(Calendar.YEAR)-dob.get(Calendar.YEAR);
如果(今天获取(日历年中的日期)
试试这个:

private int getAge(){
        String userDob = SharedPrefManager..getUserDob();
        SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy", LOCALE_DEFAULT);
        try {
            Date date = format.parse(userDob);

            Calendar today = Calendar.getInstance();
            today.set(Calendar.HOUR_OF_DAY, 0);
            today.set(Calendar.MINUTE, 0);
            today.set(Calendar.SECOND, 0);
            today.set(Calendar.MILLISECOND, 0);
            Calendar dob = Calendar.getInstance();
            dob.setTime(date);

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

            Calendar birthDayThisYear = Calendar.getInstance();
            birthDayThisYear.set(today.get(Calendar.YEAR), dob.get(Calendar.MONTH), dob.get(Calendar.DAY_OF_MONTH));
            birthDayThisYear.set(Calendar.HOUR_OF_DAY, 0);
            birthDayThisYear.set(Calendar.MINUTE, 0);
            birthDayThisYear.set(Calendar.SECOND, 0);
            birthDayThisYear.set(Calendar.MILLISECOND, 0);
            if (today.before(birthDayThisYear)) {
                age--;
            }

            return age;
        } catch (ParseException e) {
            return 0;
        }
    }