LocalDateTime获取月第一天最后一天和年的第一天和最后一天获取周的第一天和最后一天,上周的第一天和最后一天
原创
©著作权归作者所有:来自51CTO博客作者wx5c08995b28fc1的原创作品,请联系作者获取转载授权,否则将追究法律责任
LocalDate now
//月第一天
LocalDate first = now.with(TemporalAdjusters.firstDayOfMonth());
//月最后一天
LocalDate last = now.with(TemporalAdjusters.lastDayOfMonth());
//年第一天
localDate.with(TemporalAdjusters.firstDayOfYear());
//年最后一天
localDate.with(TemporalAdjusters.lastDayOfYear();
public static void main(String[] args) {
LocalDate now = LocalDate.now();
// 今天是星期几
DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.println("今天星期" + dayOfWeek.getValue());
// 本周的第一天(包括当天)
LocalDate first = now.minusDays(dayOfWeek.getValue());
System.out.println("本周第一天:" + first);
// 本周的最后一天(不包括当天)
LocalDate last = now.plusDays(7 - dayOfWeek.getValue()-1);
System.out.println("本周最后一天:" + last);
// 上周的第一天(包括当天)
System.out.println("上周的第一天:" + first.minusWeeks(1));
// 上周的最后一天(不包括当天)
System.out.println("上周的最后一天:" + last.minusWeeks(1));
}
/**
* 获取一年中第N周的日期
*
* @param year 年
* @param num 第N周
* @param minimalDaysInFirstWeek 第一周至少几天
* @param dayOfWeek 星期
* @return
*/
public static LocalDate getDateByYearAndWeekNumAndDayOfWeek(Integer year, Integer num, Integer minimalDaysInFirstWeek, DayOfWeek dayOfWeek) {
//初始化,第一周至少1天
WeekFields wfs = WeekFields.of(DayOfWeek.MONDAY, minimalDaysInFirstWeek);
//一年最后一天日期的LocalDate,如果该天获得的周数为1或52,那么该年就只有52周,否则就是53周
//获取指定时间所在年的周数
int maxNum = LocalDate.of(year, 12, 31).get(wfs.weekOfWeekBasedYear());
maxNum = maxNum == 1 ? 52 : maxNum;
System.out.println(year + "年有" + maxNum + "周");
//周数小于10在前面补个0
String numStr = num < 10 ? "0" + String.valueOf(num) : String.valueOf(num);
//2019-W01-01获取第一周的周一日期,2019-W02-07获取第二周的周日日期
String weekDate = String.format("%s-W%s-%s", year, numStr, dayOfWeek.getValue());
return LocalDate.parse(weekDate, DateTimeFormatter.ISO_WEEK_DATE);
}
public static void main(String[] args) {
System.out.println(DateUtil.getDateByYearAndWeekNumAndDayOfWeek(2023, 1,1, DayOfWeek.MONDAY));
}