/**
* 根据传参求出对应月份的最后一天
*/
@Test
public void setAndGetRangeEndTime() {
int index = 1
//int range=2
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
Calendar calendar = Calendar.getInstance()
calendar.setTime(new Date())
//昨天
calendar.set(Calendar.DATE, calendar.get(Calendar.DATE) - 1)
calendar.set(Calendar.HOUR_OF_DAY, 23)
calendar.set(Calendar.MINUTE, 59)
calendar.set(Calendar.SECOND, 59)
//月份
calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - index)
//月份最大天数
int maxDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH)
calendar.set(Calendar.DAY_OF_MONTH, maxDay)
String format = sdf.format(calendar.getTime())
System.out.println("结果:" + format)
}
/**
* 补全开始到结束时间的工具方法
*/
public List<String> testDateUtils(String startTime, String endTime) throws Exception {
startTime = "2021-02-03"
endTime = "2021-02-06"
if (StringUtils.isEmpty(startTime) || StringUtils.isEmpty(endTime)) {
throw new Exception("开始日期和截止日期都不能为空!")
}
//compareTo 当两者相等时为0,当前者小于后者时返回-1,大于时返回1。具体查看源码。
if (startTime.compareTo(endTime) > 0) {
throw new Exception("开始日期必须小于等于截止日期!")
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")
Date startDate = simpleDateFormat.parse(startTime)
Date endDate = simpleDateFormat.parse(endTime)
Calendar startCal = Calendar.getInstance()
Calendar endCal = Calendar.getInstance()
startCal.setTime(startDate)
endCal.setTime(endDate)
List<String> days = new ArrayList<>()
//当开始时间大于结束时间时则返回
while (startCal.compareTo(endCal) <= 0) {
days.add(simpleDateFormat.format(startCal.getTime()))
//Date本身加减日期过于麻烦,使用Calendar操纵日期;开始时间+1;
startCal.add(Calendar.DATE, 1)
}
return days
}