计算一段时间的差
例如:计算2023-07-01 00:00:00~2023-07-31 23:59:59的时间
方式一
public static void main(String[] args) {
// 找出 2023-07 的开始时间与结束时间
DateTime beginDate = DateUtil.beginOfMonth(DateUtil.parse("2023-07","yyyy-MM"));
DateTime endDate = DateUtil.endOfMonth(DateUtil.parse("2023-07","yyyy-MM"));
System.out.println(beginDate);
System.out.println(endDate);
ArrayList<String> day = getAllDateByParamDate(DateUtil.format(beginDate,"yyyy-MM-dd"), DateUtil.format(endDate,"yyyy-MM-dd"), "day");
System.out.println(day);
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateStr = "2021-08-19 00:00:00";
LocalDateTime date2 = LocalDateTime.parse(dateStr, fmt);
System.out.println(date2);
}
/**
* 时间工具
* @param startDate 开始日期
* @param endDate 结束日期
* @param type 类型:天-day 月-month 年-year
* @return 时间区间
*/
public static ArrayList<String> getAllDateByParamDate(String startDate, String endDate, String type) {
if (!"year".equals(type) && !"month".equals(type) && !"day".equals(type)) {
return null;
}
DateTime parseStartDate = DateUtil.parse(startDate);
DateTime parseEndDate = DateUtil.parse(endDate);
// 存储所有日期的list
ArrayList<String> list = new ArrayList<>();
// 获取所有年份
if (type.equals("year")) {
list.add(parseStartDate.toString("yyyy"));
DateTime endDateOffset = parseEndDate.offsetNew(DateField.YEAR, -1);
while (parseStartDate.isBefore(endDateOffset)) {
DateTime stageDateTime = parseStartDate.offset(DateField.YEAR, 1);
list.add(stageDateTime.toString("yyyy"));
parseStartDate = stageDateTime;
}
} else if (type.equals("month")) {
// 获取所有月份
list.add(parseStartDate.toString("yyyy-MM"));
DateTime endDateOffset = parseEndDate.offsetNew(DateField.MONTH, -1);
while (parseStartDate.isBefore(endDateOffset)) {
DateTime stageDateTime = parseStartDate.offset(DateField.MONTH, 1);
list.add(stageDateTime.toString("yyyy-MM"));
parseStartDate = stageDateTime;
}
} else {
// 获取所有日期
list.add(parseStartDate.toString("yyyy-MM-dd"));
DateTime endDateOffset = parseEndDate.offsetNew(DateField.DAY_OF_MONTH, -1);
while (parseStartDate.isBeforeOrEquals(endDateOffset)) {
DateTime stageDateTime = parseStartDate.offset(DateField.DAY_OF_MONTH, 1);
list.add(stageDateTime.toString("yyyy-MM-dd"));
parseStartDate = stageDateTime;
}
}
// 返回数据
return list;
}
结果:
方式二
public static void main(String[] args) throws Exception {
List<String> lists = getBetweenTime("2023-07-01 00:00:00", "2023-07-31 23:59:59");
System.out.println(lists);
}
public static List<String> getBetweenTime(String starttime, String endtime) {
List<String> betweenTime = new ArrayList<String>();
try {
Date sdate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(starttime);
Date edate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(endtime);
SimpleDateFormat outformat = new SimpleDateFormat("yyyy-MM-dd");
Calendar sCalendar = Calendar.getInstance();
sCalendar.setTime(sdate);
int year = sCalendar.get(Calendar.YEAR);
int month = sCalendar.get(Calendar.MONTH);
int day = sCalendar.get(Calendar.DATE);
sCalendar.set(year, month, day, 0, 0, 0);
Calendar eCalendar = Calendar.getInstance();
eCalendar.setTime(edate);
year = eCalendar.get(Calendar.YEAR);
month = eCalendar.get(Calendar.MONTH);
day = eCalendar.get(Calendar.DATE);
eCalendar.set(year, month, day, 0, 0, 0);
while (sCalendar.before(eCalendar)) {
betweenTime.add(outformat.format(sCalendar.getTime()));
sCalendar.add(Calendar.DAY_OF_YEAR, 1);
}
betweenTime.add(outformat.format(eCalendar.getTime()));
} catch (Exception e) {
e.printStackTrace();
}
return betweenTime;
}
结果: