问题描述
项目运行环境:
数据库=>mysql5.0
jdk=>jdk1.8
服务器=>tomcat8.0
之前做项目就遇到过这个问题,忘记记在哪里了,这次做项目又遇到了这个奇葩问题。因为My97DatePicker中的日期回显的时候不能直接用
Date类型的数据,所以我们就要先把Date类型的数据转换成String类型的,然后再传递到前台去展示。刚开始转换的代码如下
staff.setAccessionDateString(staff.getAccessionDate()==null?null:staff.getAccessionDate().toString());
staff.setDimissionDateString(staff.getDimissionDate()==null?null:staff.getDimissionDate().toString());
前台展示时候发现如下奇葩情况,最后会多一个.0的后缀
问题解决方案
后来经过调试发现如下图中红圈标示的,在Date类型toString后就变成了带后缀.0的。
紧接着再往前调试,发现Date类型的变量值已经也是带.0后缀的了,如下图
3. 最后把sql拷贝出来执行了一下,发现格式是正常的如下图
经过以上调试分析,应该是在从数据库查询出来之后映射的时候发生了变化。
解决方案一:
就是在Date转换成String的时候直接用toString方法,我们用如下代码进行转换。
staff.setAccessionDateString(staff.getAccessionDate()==null?null:DateUtil.format(staff.getAccessionDate(), null));
staff.setDimissionDateString(staff.getDimissionDate()==null?null:DateUtil.format(staff.getDimissionDate(), null));
上述代码中的DateUtil的format方法具体实现如下
public static String format(Date date, String... pattern) {
String myPattern = "yyyy-MM-dd HH:mm:ss";
if (date == null) {
return null;
}
if (pattern != null && pattern.length > 0) {
myPattern = pattern[0];
}
SimpleDateFormat df = new SimpleDateFormat(myPattern);
return df.format(date);
}
经过这么改造后发现这个奇葩的后缀.0就神奇的消失了。
目前暂时发现这一种解决方案,其他解决方案欢迎各位同仁来补充…..