问题出现:
项目中,遇到了一个坑,搞了一晚上,特此一记。Mysql查询出来的时间是Tue Apr 14 04:51:40 CST 2020这种格式,在页面使用 <fmt:formatDate value="${list.statisticsDate}" pattern="yyyy-MM-dd HH:mm:ss" /> 还能够显示成 2020-04-14 04:51:40 这种格式,但是这个时间作为sql的查询条件传给dao之后就有问题了。查了好多资料,自己用了下还是不行,因为这是美式时间,即使使用网上的办法转为2020-04-14 04:51:40发现有时差。自己查了下项目代码,发现有这种实现可以处理这种问题,可做参考。
环境说明:
Mysql数据库, 阿里云上的drds。这个时间字段在数据库中是Datetime 时间格式,在实体类中是String类型。
问题解决:
配置如下:
1.Mysql数据库:STATISTICS_DATE --类型 Datetime --统计时间
2.Pojo: StockDetailQuery.java
方案是:POJO先定义几个字段如下,然后生成它们的getter和setter方法,后边会用到。
String statisticsDate; //统计时间
/**
* 用于时间处理
*/
private String date1;
private String date2;
private String date3;
private String date4;
private String ptime1;
private String ptime2;
private String ptime3;
private String ptime4;
/**
* getters and setters
*/
public String getDate1() {
return date1;
}
public void setDate1(String date1) {
this.date1 = date1;
}
其他的getter和setter此处省略
工具类类里方法如下:
/**
* 获取时间
*/
public StockDetailQuery getDateTime(StockDetailQuery query) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 当日
Date d1 = new Date();
Calendar instance = Calendar.getInstance();
String dateTime = "";
instance.setTime(d1);
// 时
instance.set(Calendar.HOUR_OF_DAY, 0);
// 分
instance.set(Calendar.MINUTE, 0);
// 秒
instance.set(Calendar.SECOND, 0);
dateTime = sdf.format(instance.getTime());
query.setPtime1(dateTime);
// 第二日
instance.add(Calendar.DATE, 1);
dateTime = sdf.format(instance.getTime());
query.setPtime2(dateTime);
// 第三日
instance.add(Calendar.DATE, 1);
dateTime = sdf.format(instance.getTime());
query.setPtime3(dateTime);
// 第四日
instance.add(Calendar.DATE, 1);
dateTime = sdf.format(instance.getTime());
query.setPtime4(dateTime);
return query;
}
需要转换时间的类中方法如下:
@RequestMapping(value = "stockNumberQuery")
public String stockNumberQuery(@ModelAttribute("query") StockDetailQuery query, HttpServletRequest request,
Model model) {
// 获取时分秒
getDateTime(query);
// 格式化STATISTICS_DATE
String pattern = "EEE MMM dd HH:mm:ss zzz yyyy";
SimpleDateFormat df = new SimpleDateFormat(pattern, Locale.US);
try {
Date date = df.parse(query.getStatisticsDate());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = simpleDateFormat.format(date);
// 格式化之后STATISTICS_DATE放回查询对象
query.setStatisticsDate(dateString);
}
catch (ParseException e) {
e.printStackTrace();
}
.........
}
自此,该问题得以解决,如有问题欢迎留言。如果对您有帮助,点个赞就算是对我最好的鼓励了。