java: Realize judging whether the difference between two times is within N days

1. Only query the data within N days, and pass in the parameters startTime and endTime. If you do not pass in endTime, it defaults to the current time

insert image description here

2. Implementation method

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. Call by 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. Main implementation logic

@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)));
}

Guess you like

Origin blog.csdn.net/u011277745/article/details/125732720