Java常用代码记录
约 377 字大约 1 分钟
2025-04-02
根据当前时间确定统计开始和结束时间
/*
0-20点计算前一天,21-23计算当天
*/
public void syncDataToOld() {
String param = XxlJobHelper.getJobParam();
RangeDTO range = JSON.parseObject(param, RangeDTO.class);
LocalDateTime startTime = null;
LocalDateTime endTime = null;
if (!ObjectUtils.isEmpty(range) && StringUtils.hasText(range.getStartDate()) && StringUtils.hasText(range.getEndDate())) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDateTime start = LocalDateTime.parse(range.getStartDate(), formatter);
LocalDateTime end = LocalDateTime.parse(range.getEndDate(), formatter);
startTime = start.with(LocalTime.MIN);
endTime = end.with(LocalTime.MAX);
} else {
LocalDateTime now = LocalDateTime.now();
if (now.getHour() <= 20) {
// 20点之前计算前一天 t -1
now = now.plusDays(-1);
}
startTime = now.with(LocalTime.MIN);
endTime = now.with(LocalTime.MAX);
}
XxlJobHelper.log("syncDataToOld范围入参 startTime={}, endTime={}", startTime, endTime);
syncDataService.syncData(startTime, endTime);
}
根据当前时间确定统计时间集合
/**
*
* 返回时间日期:[2025-03-01, 2025-03-02, 2025-03-03, 2025-03-04]
*/
public static void main(String[] args) {
SyncRangeDTO syncRange = new SyncRangeDTO();
syncRange.setStartDate("2025-03-01");
syncRange.setEndDate("2025-03-04");
//[2025-03-01, 2025-03-02, 2025-03-03, 2025-03-04]
System.out.println(getTrackDate(syncRange));
}
/**
* {
* "startDate": "startDate_2435cbe2468b",
* "endDate": "endDate_4016aa4551ed"
* }
*/
private static List<LocalDate> getTrackDate(DateRangeDTO rangeDTO) {
List<LocalDate> dateList = new ArrayList<>();
if (ObjectUtils.isEmpty(rangeDTO)) {
dateList.add(getLocalDate());
} else {
String beginDateStr = rangeDTO.getStartDate();
String endDateStr = rangeDTO.getEndDate();
if (StringUtils.hasText(beginDateStr) && StringUtils.hasText(endDateStr)) {
LocalDate beginDate = DateUtils.parseLocalDateTime(DateUtils.YYYY_MM_DD, beginDateStr);
LocalDate endDate = DateUtils.parseLocalDateTime(DateUtils.YYYY_MM_DD, endDateStr);
long daysBetween = ChronoUnit.DAYS.between(beginDate, endDate);
for (int i = 0; i <= daysBetween; i++) {
dateList.add(beginDate.plusDays(i));
}
} else {
dateList.add(getLocalDate());
}
}
return dateList;
}
private static LocalDate getLocalDate() {
// from 0 to 23
int hour = LocalDateTime.now().getHour();
LocalDate trackDate;
if (hour <= 21) {
// 昨天
trackDate = LocalDate.now().plusDays(-1);
} else {
// 当天
trackDate = LocalDate.now();
}
return trackDate;
}
除法:返回百分数
public static String calculatePercent(Integer up, Integer down) {
try {
if (up.equals(0) || down.equals(0)) {
return "0%";
}
// 四舍五入
BigDecimal bigDecimal = new BigDecimal(up).divide(new BigDecimal(down), 5, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(100));
//保留2位小数
BigDecimal precent = bigDecimal.setScale(2, RoundingMode.HALF_UP);
return precent+"%";
} catch (Exception e) {
log.error("计算分数失败,now=【{}】,before=【{}】", up, down, e);
}
return "0%";
}