通过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 一.什么是反射机制 简单的来说,反射机制指的是程序在运 ...
随机推荐
- python 并发编程 多进程 目录
python multiprocessing模块 介绍 python 开启进程两种方法 python 并发编程 查看进程的id pid与父进程id ppid python 并发编程 多进程 Proce ...
- linux 正则表达式 元字符
\b 单词边界 \bcool\b 只匹配cool字符串 [root@MongoDB ~]# cat test.txt i am mike1 i am mike i am mike12 匹配有mike ...
- 大二 Java上学期总结
一学期的Java学习结束了,这学期对程序语言的理解更深了,首先感谢李津老师的教导,这学期收获挺多的,不像上学期,这学期没有任何缺课表现,希望之后的语言程序学习会更加努力. 突然感觉Java的学习如此之 ...
- 【Linux-驱动】驱动策略----自旋锁
自旋锁 自旋锁最多只能被一个内核任务持有.要是锁未被持有,请求它的内核任务便会立即得到它并继续执行.如果一个内核任务试图请求一个已经被别的内核任务持有的自旋锁,那么CPU就会一直尽心循环---旋转-- ...
- [转帖]APT34攻击全本分析
APT34攻击全本分析 https://zhuanlan.kanxue.com/article-8401.htm 高手太多 我等菜鸟目不暇接.. 一.事件综述 2019年4月18日,黑客/黑客组织使用 ...
- java8----Predicate接口的使用
//5.lambda表达式中加入Predicate // 甚至可以用and().or()和xor()逻辑函数来合并Predicate, // 例如要找到所有以J开始,长度为四个字母的名字,你可以合并两 ...
- PHP7中的数据类型(一)计数引用、写时复制,可垃圾回收
列个简单的表格说明一下:
- go 关键字之 defer
我是谁 defer - 顾名思义翻译过来叫 延迟, 所以我们通常称呼 defer func() 这样 defer 后面紧跟的函数为 延迟函数. 作者注: 不过从实际应用来讲, 延迟函数通常用来做一些函 ...
- 简洁的Asp.net菜单控件
http://www.cnblogs.com/ruinet/archive/2009/11/10/1599984.html asp.net自带的菜单控件采用的table和javascript,导致生成 ...
- ThinkPHP关联模型如何关联非主键
ThinkPHP关联模型默认是主键外键关联 官方并没有提供相关文档 如何实现非主键与非主键间之间的关联 <?php namespace Admin\Model; use Think\Model\ ...