mysql 查詢出來的數(shù)據(jù)
image.png
因?yàn)槿罩疽鼋y(tǒng)計(jì)娃承,所以我需要每天都展示出來奏夫,如果為空,則展示為0历筝,顯然上圖中的10-18日沒有展示出來
在網(wǎng)上看了一圈都是基于數(shù)據(jù)庫實(shí)現(xiàn)的酗昼,感覺有些麻煩,本文介紹的是代碼實(shí)現(xiàn)梳猪,親測可用麻削,廢話不多說:
- DO 類 數(shù)據(jù)庫的結(jié)果集
@Data
public class Demo{
@JsonFormat( pattern="yyyy-MM-dd", timezone = "GMT+8")
@ApiModelProperty("日期")
private LocalDate date;
@ApiModelProperty("數(shù)量")
private int count;
}
- 工具類
/**
* 后臺查詢出來的時間范圍數(shù)據(jù),如果有的日期沒有數(shù)據(jù)為空春弥,則給補(bǔ)全為0
* LocalDate 是java8中的類碟婆,好用且性能強(qiáng)
* 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 ;
// 如果兩個日期相等,就停止執(zhí)行
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 轉(zhuǎn)為 LocalDate
*/
public static LocalDate dateToLocalDate(Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}