java: 2つの時刻の差が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. モックで呼び出す

@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