YearMonth.now( ZoneId.of( "Pacific/Auckland" ) ) // Get current month for particular time zone.
.atDayOfMonth( 1 ) // Get the first date of that month.
.plusMonths( 1 ) // Get first of next month for Half-Open query.
@Query("from PogWorkTime p where p.codePto = :codePto and month(p.dateApply) = :month and year(p.dateApply) = :year")
Iterable<PtoExceptWorkTime> findByCodePtoAndDateApply_MonthAndDateApply_Year(@Param("codePto") String codePto,@Param("month") int month, @Param("year") int year);
4条答案
按热度按时间t9aqgxwy1#
首先查找月份的开始日期和结束日期,然后使用JPA的between方法查找当前月份的数据。
在存储库中
lg40wkob2#
最好使用
between
关键字,它使事情分配得更短。另外,如果你想在Spring Data中使用
LocalDate
或LocalDateTime
对象,你应该使用转换器类Jsr310JpaConverters
,否则文档将被存储为Blob而不是Dates(这对数据库的可移植性很不利)。https://www.mkyong.com/spring-boot/spring-boot-spring-data-jpa-java-8-date-and-time-jsr310/
lb3vh1jj3#
TL;医生
详情
假设MySQL中的列是
DATE
类型...一个月一个月
LocalDate
类表示没有时间和时区的纯日期值。时区
时区在确定日期时至关重要。对于任何给定时刻,全球各地的日期都因时区而异。例如,在Paris France中,午夜后几分钟是新的一天,而在Montréal Québec中,这几分钟仍然是"昨天"。
以
continent/region
的格式指定proper time zone name,例如America/Montreal
、Africa/Casablanca
或Pacific/Auckland
。切勿使用3 - 4个字母的缩写,例如EST
或IST
,因为它们 * 不是 * 真正的时区,没有标准化,甚至不唯一(!)。一米九一
YearMonth
类表示整个月份。获取当前月份需要一个时区,如上所述。在月份的开始/结束时,当前时刻可能是新西兰奥克兰的"下一个"月份,而在印度加尔各答仍然是"上一个"月份。获取该月的第一个日期。
半开
通常,最好使用半开
[)
方法来定义时间跨度,其中开始是 * 包含 *,而结束是 * 不包含 *。因此,定义月份意味着从该月的第一个日期开始,一直到下一个月的第一个日期,但不包括该日期。查询
不要在SQL中使用
BETWEEN
命令,因为它是完全封闭的[]
,开头和结尾都包含在内。半开使用>= & <
逻辑。uwopmtnx4#
它也很有用