首页 > 解决方案 > criteriaBuilder.greaterThanOrEqualTo 比较没有时间的日期

问题描述

我正在与criteriabuilder. 我想从数据库中提取日期在给定日期之后的所有行,而不考虑时间给定的日期 dateCreation 没有时间,例如2020-10-10格式为“日期”的“”。数据库中的日期为timestamp. Join5 是表之间的连接。

我的原始代码是:

Predicate predicateDate = criteriaBuilder.greaterThanOrEqualTo(join5.get("dateEvenement"), dateCreation);

如果dateCreation20210906,此代码部分工作,但不返回行 where dateEvenementis2021-09-06 10:11:45.014

我尝试转换SimpleDateFormat yyyy-mm-ddcriteriaBuilder.greaterThanOrEqualTo不适用于字符串。

我可能只需要没有时间的日期获取(“dateEvenement”),但我不知道该怎么做。

谢谢你的帮助。问候

标签: java

解决方案


日期时间类的部分概述:

Date date = ...; // Old
LocalDate localDate = ...; // Days
LocalDateTime localDateTime = ...;
ZonedDateTime zonedDateTime = ...; // Human use of date & time.

得到

localDate = LocalDate.parse(creationDate, DateTimeFormatter.ofPattern("yyyyMMdd"));
localDateTime = localDate.atStartOfDay();
criteriaBuilder.greaterThanOrEqualTo(join5.get("dateEvenement"), localDateTime);

对于一天结束:

localDateTime = localDate.plusDays(1).atStartOfDay();
criteriaBuilder.lessThan(join5.get("dateEvenement"), localDateTime);

应该知道 ZonedDateTime,例如 23 和 25 小时,以及不同的时区。取决于您在持久数据中存储的内容。


推荐阅读