通过java反射机制,修改年龄字段的值

需求:将生日转为年龄

    /**
     * 获取年龄值
     */
    public List  getAgeInfo(List list) throws Exception {
        if (null == list || list.size() == 0) {
            return list;
        }
        Object object = list.get(0);
        Class<?> aClass = object.getClass();
        List<Field> fieldList = new ArrayList<>() ;

        while (null != aClass) {
            fieldList.addAll(Arrays.asList(aClass .getDeclaredFields()));

            aClass = aClass.getSuperclass();
        }
        if (fieldList.size() == 0){
            Field field = aClass.getDeclaredField("age");
            setAgeByField(object, field);
        }else {
            for (int j = 0 ; j < fieldList.size(); j++) {
                Field field = fieldList.get(j);
                if ("age".equals(field.getName())){
                    setAgeByField(object, field);
                }
            }
        }
        return list;
    }

    /**
     * 设置年龄值
     * @param object
     * @param field
     * @throws Exception
     */
    private void setAgeByField(Object object, Field field) throws Exception {
        if (!field.isAccessible()){
            field.setAccessible(true);
        }
        String age = (String) field.get(object);
        age = AgeUtil.getAgeStr(DateUtil.stringToDate(DateUtil.yyyyMMddHHmmss_,age));
        field.set(object,age);
    }

AgeUtil.getAgeStr()

@SuppressWarnings("static-access")
    public static String getAgeStr(Date birthDate){
        
        String ageStr = null;
        
        if (birthDate == null) {
            birthDate = new Date();
        }
        Calendar ca = Calendar.getInstance();

        ca.setTime(birthDate);

        Calendar cal = Calendar.getInstance();
        cal.setTime(new Date());
        // 获取年
        int year = cal.get(cal.YEAR) - ca.get(ca.YEAR);
        int mouth = cal.get(cal.MONTH) - ca.get(ca.MONTH);
        int day = cal.get(cal.DAY_OF_MONTH) - ca.get(ca.DAY_OF_MONTH);
        int hour = cal.get(cal.HOUR_OF_DAY) - ca.get(ca.HOUR_OF_DAY);

        int mouths = year * 12 + mouth;

        if (mouths < 12) {
            year = 0;
        } else {
            year = mouths / 12;
        }

        Long bDay = birthDate.getTime();
        Long eDay = new Date().getTime();
        int oneDay = 60 * 60 * 24 * 1000;
        double oneDays = (eDay - bDay) / oneDay;
        if (oneDays < 30) {
            mouth = 0;
        } else {
            mouth = mouths - year * 12;
        }

        Long bHour = birthDate.getTime();
        Long eHour = new Date().getTime();
        int oneHour = 60 * 60 * 1000;
        double oneHours = (eHour - bHour) / oneHour;
        if (oneHours < 24) {
            day = 0;
        } else {
            if (mouths == 0) {
                day = (int) oneDays;
            }
        }

        Long bm = birthDate.getTime();
        Long em = new Date().getTime();
        int onem = 60 * 1000;
        double oneMs = (em - bm) / onem;
        if (oneMs < 24) {
            hour = 0;
        } else {
        }

        if (year > 0) {
            if (mouth > 0) {
                ageStr = (year + "岁" + mouth + "月");
            } else if (day > 0) {
                ageStr = (year + "岁" + day + "日");
            } else if (hour > 0) {
                ageStr = (year + "岁" + hour + "时");
            }
        } else if (mouth > 0) {
            if (day > 0) {
                ageStr = (mouth + "月" + day + "日");
            } else if (hour > 0) {
                ageStr = (mouth + "月" + hour + "时");
            }
        } else if (day > 0) {
            if (hour > 0) {
                ageStr = (day + "日" + hour + "时");
            } else {
                day = (day * 24 + hour) / 24;
                ageStr = (day + "日" + (hour + 24) + "时");
            }
        } else if (hour > 0) {
            ageStr = (0 + "日" + hour + "时");
        }
        return ageStr;
    }

DateUtil.stringToDate()

 public static Date stringToDate(String pattern, String date) throws Exception {
        SimpleDateFormat format = new SimpleDateFormat(pattern);
        try {
            return format.parse(date);
        } catch (ParseException e) {
            throw new BusinessException(SystemError.DATA_CONVERT_ERROR.getCode(),
                    SystemError.DATA_CONVERT_ERROR.getMessage());
        }
    }

 

转载于:https://www.cnblogs.com/dqcer/p/9103876.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值