在项目中需要查出这一天的所有数据进行结算分析
SELECT * FROM TABLE_XXX WHERE COLUMN_date BETWEEN #{startTime} AND #{endTime}
因为Date类型包含右边界,原先
LocalDateTime startTime = LocalDateTime.of(date, LocalTime.MIN);
LocalDateTime endTime = startTime.plusDays(1);
查出来的数据就包含第二日的数据,出现BUG。
后来使用
LocalDateTime startTime = LocalDateTime.of(date, LocalTime.MIN);
LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);
按道理说应该只查出来一天数据,可还是能查出第二天的数据
调试发现:
startTime = 2022-08-15T00:00
endTime = 2022-08-15T23:59:59.999999999
去数据库软件中查询,确实有第二天数据。
endTime小数点后有9位可以查出第二天数据,有6位就只会查出一天数据了,问题解决
建议使用
LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX).withNano(0);