通过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 一.什么是反射机制 简单的来说,反射机制指的是程序在运 ...
随机推荐
- XSS注入常用语句(整理)
<script>alert('hello,gaga!');</script> //经典语句,哈哈! >"'><img src="javas ...
- RBAC----基于角色的访问权限控制
RBAC是什么? 基于角色的权限访问控制(Role-Based Access Control) 作为传统访问控制(自主访问.强制访问)的有前景的代替 受到了广泛的关注. 在RBAC中,权限与角色相关联 ...
- Java Springboot 根据图片链接生成图片下载链接 及 多个图片打包zip下载链接
现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...
- 牛客练习赛51 C 勾股定理
链接:https://ac.nowcoder.com/acm/contest/1083/C 题目描述 给出直角三角形其中一条边的长度n,你的任务是构造剩下的两条边,使这三条边能构成一个直角三角形. 输 ...
- 断开ssh链接在后台继续运行命令
转载:http://blog.csdn.net/v1v1wang/article/details/6855552 对于linux运维,我们都是使用ssh登录到服务器,如果我们运行的任务需要很长时间或不 ...
- 高效编程之 多线程Event
Event 简介 Event 事件 是线程间通信的最简单方法之一,主要用于线程同步. 处理机制 定义一个全局内置标志Flag,如果Flag为False,执行到 event.wait 时程序就会阻塞,如 ...
- 01-Django-urls
# Django系统- 环境 - python3.6 - django1.18- 参考资料 - [django中文教程](http://python.usyiyi.cn/)# 环境搭建- anacon ...
- gp指标信息
RSI: 相对强弱指数,RSI的原理简单来说是以数字计算的方法求出买卖双方的力量对比 强弱指标理论认为,任何市价的大涨或大跌,均在0-100之间变动,根据常态分配 认为RSI值多在30-70之间变动, ...
- 用HTTP核心模块配置一个静态Web服务器
静态Web服务器的主要功能由ngx_http_core_module模块(HTTP框架的主要成员)实现与core模块类似,可以根据相关模块(如ngx_http_gzip_filter_module.n ...
- Thinkphp5 自定义分页样式显示页码和数量
Thinkphp5 自带的分页比较简单,本文通过修改Bootstrap类自定义显示分页的页码和数量 一.修改完成后如下图显示 二.修改Bootstrap代码: 1.为了不改动Bootstrap.php ...