直接上代码。
#获取某年的第一天和最后一天
LocalDate date = LocalDate.parse("2021-01-01", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
final LocalDate bigenDayOfYear = date.with(TemporalAdjusters.firstDayOfYear());
final LocalDate lastDayOfYear = date.with(TemporalAdjusters.lastDayOfYear());
#获取某月的第一天和最后一天
LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
final LocalDate bigenDayOfMonth = localDate.with(TemporalAdjusters.firstDayOfMonth());
final LocalDate lastDayOfMonth = localDate.with(TemporalAdjusters.lastDayOfMonth());
#获取某周的第一天和最后一天
LocalDate localDate = LocalDate.now();
TemporalField field = WeekFields.of(Locale.CHINA).dayOfWeek();
final LocalDate bigenDayOfWeek = localDate.with(field, 1);
final LocalDate lastDayOfWeek = localDate.with(field, 7);
至于Java中Date和LocalDate的相互转换就比较简单了。特别是很多对于日期粒度的数据统计,LocalDate就OK了。