Android学习之计算2个日期之间有多少年月日

最近项目遇到一个需求,就是计算照片上传的日期减去用户的生日来得到用户的年龄有多少年月日。听起来这个需求似乎挺简单的,但是查了很久也没有一个比较好的答案,最后东拼西凑总算勉强得到一个能用的算法。话不多说,上代码。

private void getAge(String birthday, String time, TextView tvAgeYear, TextView tvAgeMonth, TextView tvAgeDay) {
    SimpleDateFormat formatBirthday = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
    int yearBirthday = 0, monthBirthday = 0, dayBirthday = 0;
    try {
        Date dateBirthday = formatBirthday.parse(birthday);
        Calendar calendarBirthday = Calendar.getInstance();
        calendarBirthday.setTime(dateBirthday);
        yearBirthday = calendarBirthday.get(Calendar.YEAR);
        monthBirthday = calendarBirthday.get(Calendar.MONTH);
        dayBirthday = calendarBirthday.get(Calendar.DAY_OF_MONTH);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    SimpleDateFormat formatMoment = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
    Calendar calendarMoment = Calendar.getInstance();
    int yearMoment = 0, monthMoment = 0, dayMoment = 0;
    try {
        Date dateMoment = formatMoment.parse(time);
        calendarMoment.setTime(dateMoment);
        yearMoment = calendarMoment.get(Calendar.YEAR);
        monthMoment = calendarMoment.get(Calendar.MONTH);
        dayMoment = calendarMoment.get(Calendar.DAY_OF_MONTH);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if (yearBirthday > yearMoment || yearBirthday == yearMoment && monthBirthday > monthMoment || yearBirthday == yearMoment && monthBirthday == monthMoment && dayBirthday > dayMoment) {
        tvAgeYear.setText("??年");
        tvAgeMonth.setText("??月");
        tvAgeDay.setText("??天");
    } else {
        int yearAge = yearMoment - yearBirthday;
        int monthAge = monthMoment - monthBirthday;
        int dayAge = dayMoment - dayBirthday;
        //按照减法原理,先day相减,不够向month借;然后month相减,不够向year借;最后year相减
        if (dayAge < 0) {
            monthAge -= 1;
            calendarMoment.add(Calendar.MONTH, -1);//得到上一个月,用来得到上个月的天数
            dayAge = dayAge + calendarMoment.getActualMaximum(Calendar.DAY_OF_MONTH);
        }
        if (monthAge < 0) {
            monthAge = (monthAge + 12) % 12;
            yearAge--;
        }
        String year, month, day;
        if (yearAge < 10) {
            year = "0" + yearAge + "年";
        } else {
            year = yearAge + "年";
        }
        if (monthAge < 10) {
            month = "0" + monthAge + "月";
        } else {
            month = monthAge + "月";
        }
        if (dayAge < 10) {
            day = "0" + dayAge + "天";
        } else {
            day = dayAge + "天";
        }
        tvAgeYear.setText(year);
        tvAgeMonth.setText(month);
        tvAgeDay.setText(day);
    }
}
这里生日格式为

"yyyy-MM-dd"
另一个时间格式为

"yyyy-MM-dd HH:mm:ss"

大家可以根据需求自己变动,这里只要得到年月日即可。也可以把String放到一个TextView,大家随意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值