java criteriaBuilder.greaterThanOrEqualTo比较没有时间的日期

csbfibhn  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(317)

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

我的原始代码是:

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

如果dateCreation20210906,则此代码部分工作,但不返回dateEvenement2021-09-06 10:11:45.014的行
我尝试用SimpleDateFormatyyyy-mm-dd转换,但是criteriaBuilder.greaterThanOrEqualTo不能处理字符串。
我可能只需要日期get(“dateEvenement”)没有时间,但我不知道该怎么做。
谢谢你的帮助。问候

lnlaulya

lnlaulya1#

日期时间类的部分概述:

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小时,以及不同的时区。这取决于您在持久数据中存储的内容。

46qrfjad

46qrfjad2#

需要.as(Date.class)方法来执行转换。
替换如下:

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

用这个:

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

相关问题