You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Criteria Builder between()时间范围:是否包含毫秒级时间边界?

问题解答

你的代码中,当当前时间为上午10:05时,该谓词仅截止到10:04:00.000,不会包含10:04:59.999的时间戳,原因如下:

  • 当当前时间是10:05整时,LocalDateTime.now(ZoneOffset.UTC).minusMinutes(1)生成的是10:04:00.000(精确到纳秒则为10:04:00.000000000),转换为Timestamp后对应的就是这个时间点。
  • JPA的between谓词对应SQL的BETWEEN语法,会包含左右两个边界值,但10:04:59.999的时间戳数值明显大于右边界10:04:00.000,因此不在范围内。

如果想覆盖10:00到10:04的完整时间段(包含10:04:59.999),更合理的做法是使用半开区间,示例代码如下:

LocalDateTime utcNow = LocalDateTime.now(ZoneOffset.UTC);
LocalDateTime startTime = utcNow.minusMinutes(5);
// 结束时间设为10:05:00.000,确保包含10:04的最后一刻
LocalDateTime endTime = utcNow;

predicates.add(criteriaBuilder.greaterThanOrEqualTo(
    root.get("date"), 
    criteriaBuilder.literal(Timestamp.valueOf(startTime))
));
predicates.add(criteriaBuilder.lessThan(
    root.get("date"), 
    criteriaBuilder.literal(Timestamp.valueOf(endTime))
));

内容的提问来源于stack exchange,提问作者Tech Rider

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:31:21