java:实现判断两个时间差是否在N天以内

1.只查询N天之内的数据,传入参数startTime、endTime,如果不传入endTime默认为当前时间

在这里插入图片描述

2.实现方式

public static boolean lessThanNDays(Date end, Date begin, long diffDay) {
    boolean flag = false;
    long diff = end.getTime() - begin.getTime();//这样得到的差值是微秒级别
    Calendar currentTimes = dataToCalendar(end);//当前系统时间转Calendar类型
    Calendar firstTimes = dataToCalendar(begin);//查询的数据时间转Calendar类型
    int year = currentTimes.get(Calendar.YEAR) - firstTimes.get(Calendar.YEAR);//获取年
    if (year > 0) {
        return flag;
    }
    int month = currentTimes.get(Calendar.MONTH) - firstTimes.get(Calendar.MONTH);
    if (month > 0) {
        return flag;
    }

    long days = diff / (1000 * 60 * 60 * 24);
    if (days == diffDay) {
        long hours = (diff - days * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60); //获取时
        if (hours > 0) {
            return flag;
        }
        long minutes = (diff - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60)) / (1000 * 60);  //获取分钟
        if (minutes > 0) {
            return flag;
        }
        long s = (diff / 1000 - days * 24 * 60 * 60 - hours * 60 * 60 - minutes * 60);//获取秒
        if (s > 0) {
            return flag;
        }
    } else if (days < diffDay) {
        return !flag;
    }
    return flag;
}

public static Calendar dataToCalendar(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    return calendar;
}

3.通过mock调用

@Test
public void fees() throws Exception {
    MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/user_fee/contractUIdDetail/list")
            .param("beginTime", "2022-07-09 18:43:00")
            .param("endTime", "2022-07-11 18:42:00")
            .param("contractUIds", "")
            .contentType(MediaType.APPLICATION_FORM_URLENCODED)
        )
        .andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
    int status = mvcResult.getResponse().getStatus();
    System.out.println(status);
    MockHttpServletResponse response = mvcResult.getResponse();
    // 这里需要进行编码格式为utf-8,否则可能会出现乱码
    String result = response.getContentAsString(Charset.forName("utf-8"));
    System.out.println(result);
}

4. 主要实现逻辑

@GetMapping("/user_fee/contractUIdDetail/list")
Result<List<UserExchangeFee>> getUserFee(@RequestParam("beginTime") String beginTime,@RequestParam(value = "endTime",required = false) String endTime, @RequestParam(value = "contractUIds") List<Long> contractUIds) {
    // 数据不能大于100
    int size = contractUIds.size();
    if (size>100) {
        return Result.getFailedResult(InternalApiConstants.TRANS_PROCESSING_CODE, "contractUIds's size must less than or equal 100");
    }

    if (StringUtils.isBlank(beginTime)) {
        return Result.getFailedResult(InternalApiConstants.TRANS_PROCESSING_CODE, "beginTime can not be null");
    }

    Date end = null;
    String pattern = "yyyy-MM-dd HH:mm:ss";
    if (StringUtils.isBlank(endTime)) {
        end = new Date();
    }else {
        end = DateUtils.parseDate(endTime,pattern);
    }
    Date begin = DateUtils.parseDate(beginTime,pattern);
    // 判断end与start的相差天数 不能超过两天
    boolean days = lessThanNDays(begin, end,2L);
    if (!days) {
        return Result.getFailedResult(InternalApiConstants.TRANS_PROCESSING_CODE, "The time difference cannot exceed 2 days");
    }
    return Result.getSuccessResult(transList(contractStatisticClient.getUserFeeList(begin, end, contractUIds)));
}

猜你喜欢

转载自blog.csdn.net/u011277745/article/details/125732720
今日推荐