I have timestamp(6) column in my database. Example : "2020-10-01 00:00:00" By criteria API I made two predicates
private static Predicate withInstantGe(CriteriaBuilder cb, Root<Object> root, Instant date) {
return Optional.ofNullable(date).map(d -> cb.greaterThanOrEqualTo(root.<Instant>get("date"), d)).orElse(cb.and());
}
private static Predicate withInstantLe(CriteriaBuilder cb, Root<Object> root, Instant date) {
return Optional.ofNullable(date).map(d -> cb.lessThanOrEqualTo(root.<Instant>get("date"), d)).orElse(cb.and());
}
But it does not return columns with dates from "2020-10-01 00:00:00" to "2020-10-01 05:00:00" The difference is 5 hours... and my ZoneInfo[id="Asia/Yekaterinburg", but I don't undersend how it affects on criteria return.
Calendar startCalendar = getCalendarFrom(); (method returns Calendar where i setted yead day month etc)
TimeZone sdvsd = startCalendar.getTimeZone();
Instant start = getInstant(startCalendar);
Calendar endCalendar = getCalendarTo();
Instant end = getInstant(endCalendar);
private Instant getInstant(Calendar calendar) {
ZonedDateTime zdt = ZonedDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId());
return zdt.withZoneSameLocal(ZoneOffset.UTC).toInstant();
}