通过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());
}
}
通过java反射机制,修改年龄字段的值的更多相关文章
- Day14_85_通过反射机制修改Class的属性值(IO+Properties)动态修改
通过反射机制修改Class的属性值(IO+Properties)动态修改 import java.io.FileInputStream; import java.io.FileNotFoundExce ...
- Android利用Java反射机制修改Android System Language
private void updateLanguage(Locale locale) { try { Object objIActMag, objActMagNative; Class clzIAct ...
- Java反射机制可以动态修改实例中final修饰的成员变量吗?
问题:Java反射机制可以动态修改实例中final修饰的成员变量吗? 回答是分两种情况的. 1. 当final修饰的成员变量在定义的时候就初始化了值,那么java反射机制就已经不能动态修改它的值了. ...
- Java通过反射机制修改类中的私有属性的值
首先创建一个类包含一个私有属性: class PrivateField{ private String username = "Jason"; } 通过反射机制修改username ...
- 【java】-- java反射机制
参考文章:https://blog.csdn.net/sinat_38259539/article/details/71799078 https://blog.csdn.net/wanderlu ...
- Java反射学习:深入学习Java反射机制
一.Java反射的理解(反射是研究框架的基础之一) Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的 ...
- Java 基础之详解 Java 反射机制
一.什么是 Java 的反射机制? 反射(Reflection)是Java的高级特性之一,是框架实现的基础,定义:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法: ...
- 读懂框架设计的灵魂—Java反射机制
尽人事,听天命.博主东南大学硕士在读,热爱健身和篮球,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 CS-Wiki(Gitee 官 ...
- [转]java反射机制
原文地址:http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html 一.什么是反射机制 简单的来说,反射机制指的是程序在运 ...
随机推荐
- windows上利用dhcpsrv搭建DHCP服务器
起因是一个很奇葩的需求:乙方要远程升级仪器,用TeamViewer远程控制并ssh到仪器,但仪器内部IP地址没有写死,靠DHCP服务器获取.那么就要在PC建立DHCP服务器,用网线连接仪器,然后才能看 ...
- numpy库中数组的数据类型
numpy库中数组的数据类型 dtype是一个特殊的对象,它含有ndarray将一块内存解释为特殊数据类型所需要的信息 指定数据类型创建数组 >>> import numpy as ...
- P1079Vigenère密码
这是2012年noip提高组的的DAY1T1,我用了一下午的时间,一次性AC^^. 这是一个字符串的模拟题.首先给出了一个密码对应法则,我们发现在同一对角线的明文通过密钥得出来的密文是相同的.根据八皇 ...
- 题解 AT1877 【回文分割】
题意:给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串. 返回 s 所有可能的分割方案. 示例: 输入:aab 输出:3 解释:aba 思路: 记录字符串中每个字符出现的次数si 如果 ...
- python day1-requests
一.什么是requests Requests是用python语言基于urllib编写的,采用的是Apache2 Licensed开源协议的HTTP库. 相对于urllib库(自带,无需手动安装)而言, ...
- python 元组及操作
# 元组是'不可变'的 list 使用小括号 创建后不允许修改 # 创建# t = ('a','b','c',1,2,3)# print(t)# print(type(t))# # 3# print( ...
- python字符串 常用函数 格式化字符串 字符串替换 制表符 换行符 删除空白 国际货币格式
# 字符串常用函数# 转大写print('bmw'.upper()) # BMW# 转小写print('BMW'.lower()) # bmw# 首字母大写print('how aae you ?'. ...
- antd组件Upload实现自己上传
前言 在实现图片上传时,可能需要用到Upload,但是它默认的上传方式是加入图片后直接上传,如果要实现最后再一次性上传,需要自定义内容. //添加按钮的样式 const uploadButton = ...
- PHP 中一个 False 引发的问题,差点让公司损失一百万
PHP 中一个 False 引发的问题,差点让公司损失一百万 一.场景描述 上周我一个在金融公司的同学,他在线上写一个 Bug,差点造成公司损失百万.幸好他及时发现了这个问题并修复了.这是一个由 PH ...
- maven联通网络下中央仓库不能访问的解决办法
最近刚开始学习maven工具,下载解压完毕,环境变量配置完毕,运行如下命令尝试快速构建一个maven项目: mvn archetype:generate 结果就有问题: [INFO] Scanning ...