Java中根据日期获取年龄的相关处理方法

1、计算年龄,就近原则

2、计算余月,就近原则

3、计算总月份,就近原则

相关代码



import org.joda.time.Months;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.util.Calendar;
import java.util.Date;

/**
 * 年龄工具类
 */
public class AgeUtils {

    /**
     * 计算年龄,就近原则
     */
    public static Integer getAge(Date birthday) {
        if (birthday == null) return 0;
        Calendar c2 = Calendar.getInstance();
        if (c2.before(birthday)) return 0;
        Calendar c1 = Calendar.getInstance();
        c1.setTime(birthday);

        int month = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
        int year = c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR);
        int totalMonths = year * 12 + month;

        int age = totalMonths / 12;
        int leaveMonth = totalMonths % 12;

        int day = c2.get(Calendar.DAY_OF_MONTH) - c1.get(Calendar.DAY_OF_MONTH);
        int totalDayOfMonth = c2.getActualMaximum(Calendar.DAY_OF_MONTH);

        int p = day * 100 / totalDayOfMonth;
        if (leaveMonth == 11) {
            if (p >= 50 || p < 0 && p >= -50) age += 1;
        }
        return age;
    }

    /**
     * 计算年龄,就近原则
     */
    public static Integer getAge(Date birthday, Date endDate) {
        if (birthday == null) return 0;
        Calendar c = Calendar.getInstance();
        c.setTime(endDate);
        if (c.before(birthday)) return 0;
        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");
        int totalMonths = Months.monthsBetween(formatter.parseDateTime(DateUtils.dateToStr(birthday, "yyyy-MM-dd")), formatter.parseDateTime(DateUtils.dateToStr(endDate, "yyyy-MM-dd"))).getMonths();

        int age = totalMonths / 12;
        int leaveMonth = totalMonths % 12;

        int day = Integer.parseInt(DateUtils.dateToStr(endDate, "dd")) - Integer.parseInt(DateUtils.dateToStr(birthday, "dd"));
        int totalDayOfMonth = DateUtils.getDaysOfMonth(endDate);

        int p = day * 100 / totalDayOfMonth;
        if (leaveMonth == 11) {
            if (p >= 50 || p < 0 && p >= -50) age += 1;
        }
        return age;
    }

    /**
     * 计算余月,就近原则
     */
    public static Integer getLeaveMonth(Date birthday) {
        if (birthday == null) return 0;
        Calendar c = Calendar.getInstance();
        if (c.before(birthday)) return 0;

        Date now = new Date();
        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

        int day = Integer.parseInt(DateUtils.dateToStr(now, "dd")) - Integer.parseInt(DateUtils.dateToStr(birthday, "dd"));
        int totalDayOfMonth = DateUtils.getDaysOfMonth(now);

        int i = Months.monthsBetween(formatter.parseDateTime(DateUtils.dateToStr(birthday, "yyyy-MM-dd")), formatter.parseDateTime(DateUtils.dateToStr(now, "yyyy-MM-dd"))).getMonths() % 12;
        int p = day * 100 / totalDayOfMonth;
        if (p >= 50 || p < 0 && p >= -50) {
            if (i == 11) i = 0;
            else i += 1;
        }
        return i;
    }

    /**
     * 计算余月,就近原则
     */
    public static Integer getLeaveMonth(Date birthday, Date endDate) {
        if (birthday == null) return 0;
        Calendar c = Calendar.getInstance();
        if (c.before(birthday)) return 0;

        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

        int day = Integer.parseInt(DateUtils.dateToStr(endDate, "dd")) - Integer.parseInt(DateUtils.dateToStr(birthday, "dd"));
        int totalDayOfMonth = DateUtils.getDaysOfMonth(endDate);

        int totalMonths = Months.monthsBetween(formatter.parseDateTime(DateUtils.dateToStr(birthday, "yyyy-MM-dd")), formatter.parseDateTime(DateUtils.dateToStr(endDate, "yyyy-MM-dd"))).getMonths() % 12;
        int p = day * 100 / totalDayOfMonth;
        if (p >= 50 || p < 0 && p >= -50) {
            if (totalMonths == 11) totalMonths = 0;
            else totalMonths += 1;
        }
        return totalMonths;
    }

    /**
     * 计算总月份,就近原则
     */
    public static Integer getMonth(Date birthday) {
        if (birthday == null) return 0;
        Calendar c = Calendar.getInstance();
        if (c.before(birthday)) return 0;

        Date now = new Date();
        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

        int day = Integer.parseInt(DateUtils.dateToStr(now, "dd")) - Integer.parseInt(DateUtils.dateToStr(birthday, "dd"));
        int totalDayOfMonth = DateUtils.getDaysOfMonth(now);

        int totalMonths = Months.monthsBetween(formatter.parseDateTime(DateUtils.dateToStr(birthday, "yyyy-MM-dd")), formatter.parseDateTime(DateUtils.dateToStr(now, "yyyy-MM-dd"))).getMonths();
        int p = day * 100 / totalDayOfMonth;
        if (p >= 50 || p < 0 && p >= -50) {
            if (totalMonths == 11) totalMonths = 0;
            else totalMonths += 1;
        }
        return totalMonths;
    }

    /**
     * 计算总月份,就近原则
     */
    public static Integer getMonth(Date birthday, Date endDate) {
        if (birthday == null) return 0;
        Calendar c = Calendar.getInstance();
        if (c.before(birthday)) return 0;

        DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd");

        int day = Integer.parseInt(DateUtils.dateToStr(endDate, "dd")) - Integer.parseInt(DateUtils.dateToStr(birthday, "dd"));
        int totalDayOfMonth = DateUtils.getDaysOfMonth(endDate);

        int totalMonths = Months.monthsBetween(formatter.parseDateTime(DateUtils.dateToStr(birthday, "yyyy-MM-dd")), formatter.parseDateTime(DateUtils.dateToStr(endDate, "yyyy-MM-dd"))).getMonths();
        int p = day * 100 / totalDayOfMonth;
        if (p >= 50 || p < 0 && p >= -50) {
            if (totalMonths == 11) totalMonths = 0;
            else totalMonths += 1;
        }
        return totalMonths;
    }

}

其中,里面的方法会用到之前文章的方法工具类。参照这里 地址

 这就是Java中年龄的相关处理方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一枝风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值