java 日期范围取数据_Java报表填充:查询日期范围内,无数据填充0

填充处理 代码:java

/**填充处理*/

String start = vehicleRecordInfo.getStartTime();

String end = vehicleRecordInfo.getEndTime();

try {

Date date1 = sdf.parse(start);

Date date2 = sdf.parse(end);

int daySub = differentDays(date1,date2); //间隔天数

List dateList = genDateRange(date1,date2); //存放连续日期的list

if(daySub==0){ //间隔天数为0,同一天

if(list.size()==0){

VehicleRecordHour vrh = vrhFilling(); //调用填充数据方法vrhFilling

Date dtList = sdf.parse(dateList.get(0));

vrh.setStaticsDate(dtList); //单独set日期

list.add(vrh);

}

}else {

final int listSize = list.size(); //填充会改变size,设置为final

for (int i = 0; i <= daySub; i++) {

//若是list为空,直接填充

if (listSize == 0) {

VehicleRecordHour vrh = vrhFilling(); //调用填充数据方法vrhFilling

Date dtList = sdf.parse(dateList.get(i));

vrh.setStaticsDate(dtList); //单独set日期

list.add(vrh);

}

//list不为空,就须要对比

for (int j = 0; j < listSize; j++) {

Boolean boo;

Date sli = list.get(j).getStaticsDate();

String reStr = sdf.format(sli);

if (!dateList.get(i).equals(reStr)) { //若是数据库没有该日期dateList.get(i)

boo = false; //没有

} else {

break;

}

if (j == listSize - 1 && boo == false) { //到最后都没有该日期

VehicleRecordHour vrh = vrhFilling(); //调用填充数据方法vrhFilling

Date dtList = sdf.parse(dateList.get(i));

vrh.setStaticsDate(dtList); //单独set日期

list.add(vrh);

}

}

}

}

} catch (ParseException e) {

e.printStackTrace();

}

list.sort(Comparator.comparing(VehicleRecordHour::getStaticsDate));

PageInfo page = new PageInfo(list);

return RestResult.success(new PageEntity(page));

附:数据库

一、指定日期范围获取日期列表code

/**

* 生成日期区间

* @param start1 e.g. 2018-08-28 12:00:00

* @param end1 e.g. 2018-08-30 10:10:00

* @return [2018-08-28, 2018-08-29, 2018-08-30]

*/

public static List genDateRange(Date start1, Date end1) {

DateTime start=new DateTime(start1);

DateTime end=new DateTime(end1);

List list = new ArrayList<>();

if (start.isAfter(end)) {

return list;

}

DateTime _start = new DateTime(start.getYear(), start.getMonthOfYear(), start.getDayOfMonth(), 0, 0, 0);

DateTime _end = new DateTime(end.getYear(), end.getMonthOfYear(), end.getDayOfMonth(), 0, 0, 0);

DateTime date = new DateTime(_start);

while (true) {

if (!date.isAfter(_end)) {

list.add(date.toString(CommonUtils.DATE));

date = date.plusDays(1);

} else {

break;

}

}

return list;

}

二、日期处理,将传来的日期自定义拆分处理orm

/**

*日期处理,joda-time

*/

Record record = new Record();

//日期拆分,传入的实体为recordEntity

if(recordEntity.getRecordTime()!=null) {

Long recordTime = recordEntity.getRecordTime();

Date recordDateTime = new Date(recordTime);

//Date转成Calendar

Calendar cal = Calendar.getInstance();

cal.setTime(recordDateTime);

int year = cal.get(Calendar.YEAR);

int month = cal.get(Calendar.MONTH) + 1; //获取的月份0开始的

int date = cal.get(Calendar.DATE);

int hour = cal.get(Calendar.HOUR);

//joda-time

Date staticsDate = new DateTime(year, month, date, 0, 0, 0).toDate();

Date staticsMonth = new DateTime(year, month, 1, 0, 0, 0).toDate(); //值为 Wed Aug 01 00:00:00 CST 2018

record.setStaticsDate(staticsDate);

record.setStaticsDate(staticsMonth);

record.setSnapYear(year);

record.setSnapMonth(month);

record.setSnapDate(date);

record.setSnapHour(hour);

record.setSnapTime(recordDateTime);

}

三、两日期间隔天数get

/**

* 两个时间的间隔天数 joda-time

* @param date1

* @param date2

* @return

*/

public static int differentDays(Date date1,Date date2)

{

LocalDate start=new LocalDate(date1);

LocalDate end=new LocalDate(date2);

int days = Days.daysBetween(start, end).getDays();

return days;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值