通过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 一.什么是反射机制 简单的来说,反射机制指的是程序在运 ...
随机推荐
- 第三章 四大组件之Activity(一)生命周期
1.生命周期: onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy() 2.各种状况下Ac ...
- 文件类型 | 命令ln | 软链接硬链接
1.9文件类型 1.9.1常见文件类型 d:目录 -:普通文件 l:链接文件 b:设备 1.9.2文件后缀名 sh:shell脚本 tar.gz:压缩包 my.cnf:配置文件 test.zip:压缩 ...
- UUID工具类及使用
1.工具类: package UUIdtest; import java.util.UUID; public class UUIDUtil { public static String getUUID ...
- Unix时间戳和Java 的 System.currentTimeMillis()的区别
- Qt 遍历不规则树的节点
在使用Qt的GraphicsScene作图时,遇到类似这样的需求:在scene中创建节点类似下图, 现在我要把每个节点的txt保存到xml文件中,结构为 <?xml version='1.0' ...
- 【JZOJ 3910】Idiot 的间谍网络
题面: Description 作为一名高级特工,Idiot 苦心经营多年,终于在敌国建立起一张共有n 名特工的庞大间谍网络. 当然,出于保密性的要求,间谍网络中的每名特工最多只会有一名直接领导.现在 ...
- kafka连接器
独立模式 bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.prope ...
- 配置多个broker
前言 什么是kafka?举个例子,生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡 ...
- 环境变量和Path环境变量
环境变量 百度百科下的定义 一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等. 环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所 ...
- AXI总线协议
AXI总线协议 (一).概述 AXI (高性能扩展总线接口,Advanced eXtensible Interface)是ARM AMBA 单片机总线系列中的一个协议,是计划用于高性能.高主频的系统设 ...