mysql 查询出来的数据
因为日志要做统计,所以我需要每天都展示出来,如果为空,则展示为0,显然上图中的10-18日没有展示出来
在网上看了一圈都是基于数据库实现的,感觉有些麻烦,本文介绍的是代码实现,亲测可用,废话不多说:
- DO 类 数据库的结果集
@Data
public class Demo{
@JsonFormat( pattern="yyyy-MM-dd", timezone = "GMT+8")
@ApiModelProperty("日期")
private LocalDate date;
@ApiModelProperty("数量")
private int count;
}
- 工具类
/**
* 后台查询出来的时间范围数据,如果有的日期没有数据为空,则给补全为0
* LocalDate 是java8中的类,好用且性能强
* d1 和d2代表时间范围
*/
public static List<Demo> transNullToZero(List<Demo> list,Date d1, Date d2){
LocalDate start = dateToLocalDate(d1);
LocalDate end = dateToLocalDate(d2);
int count = 0 ;
// 如果两个日期相等,就停止执行
while(!start.isEqual(end)){
Demo demo= new Demo();
if(list!=null&&list.size()>count){
Demo demo1= list.get(count);
LocalDate dat = demo1.getDate();
if(!start.isEqual(dat)){
demo.setCount(0);
demo.setDate(start);
list.add(count,demo);
}
}else{
demo.setCount(0);
demo.setDate(start);
list.add(count,demo);
}
// 将开始日期加1天
start = start.plusDays(1);
count++;
}
return list;
}
/**
* 将 Date 转为 LocalDate
*/
public static LocalDate dateToLocalDate(Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}