业务场景
我这个地方是要做一个批处理操作,拿到一个List对象列表,判断对象列表的会员服务到期时间是什么时候,如果到期时间和现在当前时间相隔1天,也就是小于两天,我就要对此次操作失败,把以前的状态更改回来,所以加了一个
@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class)
注解
问题是,我刚开始用LocalDateTime的compareTo方法比较时间是对的,但是后来发现如果这个想差间隔大于了一个月的到的间隔天数就不对了,具体如下
问题复现
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime expireTime = now.plusDays(3);
System.out.println("间隔天数:" + expireTime.compareTo(now));
}
运行结果:间隔天数:3
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
LocalDateTime expireTime = now.plusDays(30);
System.out.println("间隔天数:" + expireTime.compareTo(now));
}
运行结果:间隔天数:1
为什么会出现这个状况呢?
compareTo方法
public int compareTo(ChronoLocalDateTime<?> other) {
if (other instanceof LocalDateTime) {
return compareTo0((LocalDateTime) other);
}
return ChronoLocalDateTime.super.compareTo(other);
}
private int compareTo0(LocalDateTime other) {
int cmp = date.compareTo0(other.toLocalDate());
if (cmp == 0) {
cmp = time.compareTo(other.toLocalTime());
}
return cmp;
}
我们的参数传进来后会首先进行一个compareTo0的方法,这个方法就有猫腻了
int compareTo0(LocalDate