最近工作中 需要 给前端返回 一个当月的日期 就像那种日历一样 不但有当月的 可能还有下一个月的 要把日历占满的情况
这种方式 实现起来有很多种方式 我这里介绍两种 一种是工具类的 一种是自己写的
1、 工具类 注意 hutool工具类 我的版本是 5.3.10 低版本的 可能 周一周日 作为第一天 会出问题
@Test
public void timeTest(){
//前端随便传来的时间
DateTime now = DateTime.of("2020-07-11","yyyy-MM-dd");
// 获得 使用hutool工具类 获取 当月的第一天和最后一天
DateTime beginOfMonth = DateUtil.beginOfMonth(now);
DateTime dateTime = DateUtil.endOfMonth(now);
// 获取 每月的第一周的开始日期 isMondayAsFirstDay 是否周一做为一周的第一天(false表示周日做为第一天)
Calendar calendar = DateUtil.beginOfWeek(beginOfMonth.toCalendar(), false);
Calendar calendar1 = DateUtil.endOfWeek(dateTime.toCalendar(), false);
System.out.println("七月最后一周结束时间"+DateTime.of(calendar1));
System.out.println("七月第一周的开始日期"+DateTime.of(calendar));
}
七月最后一周结束时间2020-08-01 23:59:59
七月第一周的开始日期2020-06-28 00:00:00
2 自己实现
public static void main(String[] args) {
LocalDate now = LocalDate.parse("2020-05-03");
int addDays=0;
//获取本月的第一天 使用TemporalAdjusters
LocalDate first = now.with(TemporalAdjusters.firstDayOfMonth());
//获取本月最后一天
LocalDate last = now.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("本月第一天"+first);
System.out.println("本月最后一天"+last);
//算出第一周的 第一个周日是几号 (周日为开始时间)
while(!DayOfWeek.SUNDAY.equals(first.getDayOfWeek())){
addDays++;
//减一天
first = first.minusDays(1);
}
System.out.println("本月第一周第一天"+first);
//算出 一周的结束时间是几号 周六为结束时间
while (!DayOfWeek.SATURDAY.equals(last.getDayOfWeek())){
addDays++;
//加一天
last=last.plusDays(1);
}
// System.out.println("本月最后一周最后一天"+last);
//Period period = Period.between(first, last);
//System.out.println(addDays+now.lengthOfMonth());
// LocalDate.parse("", DateTimeFormatter.)
//int monthValue = LocalDateTime.now().getMonthValue();
// System.out.println(now.lengthOfMonth());
/*
do {
System.out.println(first);
first = first.plusDays(1);
// System.out.println(first);
}while (!first.equals(last));
*/
// 循环 last.plusDays(1) 不加一 的话 获取不到最后的值
while (!first.equals(last.plusDays(1))){
System.out.println(first);
first = first.plusDays(1);
}
//使用for 循环来遍历所以时间
for (LocalDate fi=first;!fi.equals(last.plusDays(1));fi=fi.plusDays(1)){
System.out.println(fi);
}
}