1. 场景:
- 根据一个指定的日期,获取对应的这个日期,每周和每月的实时最后一天,以周为例,例如本周以过完,则返回本周周末的日期,如果没有过完,则返回本周正在过的最后一天,月也如此。
- 如果查询的类型为天,则返回当天的开始时间和结束时间。
- 例子中的DateUtil来自于hutool.jar,可自行引入。
2. 代码如下:
package com.yicaisu.common.enums;
public enum DateEnums {
DAY,
MONTH,
YEAR,
WEEK
}
public static Map<String, Object> getStartAndEndTimeOfDayByRealTime(String date, DateEnums enumsType, Boolean isNext) {
if (StringUtils.isBlank(date)) {
date = DateUtil.now().substring(0, DateUtil.now().lastIndexOf(" "));
}
if (null == isNext) {
isNext = false;
}
String now = DateUtil.now().substring(0, DateUtil.now().lastIndexOf(" "));
Integer days = 0;
DateTime time = DateUtil.parse(date);
String beginDate;
String endDate;
if (DateEnums.DAY.equals(enumsType)) {
beginDate = DateUtil.format(DateUtil.beginOfDay(time), DATE_FORMAT);
endDate = DateUtil.format(DateUtil.endOfDay(time), DATE_FORMAT);
days = 1;
} else if (DateEnums.MONTH.equals(enumsType)) {
beginDate = DateUtil.format(DateUtil.beginOfMonth(time), DATE_FORMAT);
endDate = DateUtil.format(DateUtil.endOfMonth(time), DATE_FORMAT);
days = Integer.valueOf(endDate.substring(endDate.lastIndexOf("-") + 1, endDate.lastIndexOf(" ")));
if (DateUtil.parse(endDate.substring(0, endDate.lastIndexOf(" "))).getTime() > DateUtil.parse(now).getTime()) {
endDate = DateUtil.format(DateUtil.parse(now), END_DATE_FORMAT);
days = DateUtil.dayOfMonth(DateUtil.parse(endDate));
}
} else {
beginDate = DateUtil.format(DateUtil.beginOfWeek(time), DATE_FORMAT);
endDate = DateUtil.format(DateUtil.endOfWeek(time), DATE_FORMAT);
days = 7;
if (DateUtil.parse(endDate.substring(0, endDate.lastIndexOf(" "))).getTime() > DateUtil.parse(now).getTime()) {
endDate = DateUtil.format(DateUtil.parse(now), END_DATE_FORMAT);
days = DateUtil.dayOfWeek(DateUtil.parse(endDate)) - 1;
}
}
if (isNext) {
endDate = DateUtil.format(DateUtil.offsetDay(DateUtil.parse(endDate), 1), BEGIN_DATE_FORMAT);
}
Map<String, Object> dateMap = new HashMap<>();
dateMap.put(BEGIN_DATE_KEY, beginDate);
dateMap.put(END_DATE_KEY, endDate);
dateMap.put(DAYS, days);
return dateMap;
}
3. 例子如下:
String date = "2022-09-21";
Map<String, Object> map1 = getStartAndEndTimeOfDayByRealTime(date, DateEnums.DAY, false);
System.out.println(map1);
Map<String, Object> map2 = getStartAndEndTimeOfDayByRealTime(date, DateEnums.DAY, true);
System.out.println(map2);
Map<String, Object> map3 = getStartAndEndTimeOfDayByRealTime(date, DateEnums.WEEK, false);
System.out.println(map3);
Map<String, Object> map4 = getStartAndEndTimeOfDayByRealTime(date, DateEnums.WEEK, true);
System.out.println(map4);
Map<String, Object> map5 = getStartAndEndTimeOfDayByRealTime(date, DateEnums.MONTH, false);
System.out.println(map5);
Map<String, Object> map6 = getStartAndEndTimeOfDayByRealTime(date, DateEnums.MONTH, true);
System.out.println(map6);
4.结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/8be24870415141d998aca99cc10bc1a1.png)