日历类获取的是本地的时间 getTime不包含时区
如果要包含结束日期 必须要赋值时区, 毫秒值也要自己设置,不然就是系统的毫秒值
但是懒得去看能不能设置毫秒值
如果要这一天不妨将endDate多传一天
/**
* 返回区间内的日期 不包含结束日期
* @param startDate
* @param endDate
* @return
*/
public static List<LocalDate> getStartDateUntilEndDate(LocalDate startDate, LocalDate endDate) {
//设置时区
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
//日历类 获取的本地时间
Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT+8"));
//设置开始时间
c.set(startDate.getYear(), startDate.getMonthValue() - 1, startDate.getDayOfMonth(),0,0,0);
// 定义时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//转换格式
LocalDateTime localDateTime = endDate.atStartOfDay();
Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant();
Date endTime = Date.from(instant);
//准备list集合
List<LocalDate> list = new ArrayList<>();
//循环将时间搞出来
while (c.getTime().compareTo(endTime) < 0) {
String format = sdf.format(c.getTime());
LocalDate localDate = LocalDate.parse(format);
list.add(localDate);
//增加一天
c.add(Calendar.DATE,1);
}
return list;
}
//localDate 转Date
Date.from(LocalDate.now().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())
//Date转LocalDate
new Date().toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
//localDate获取当月第一天 和最后一天 日期
LocalDate firstDay = date.with(TemporalAdjusters.firstDayOfMonth()); //第一天
LocalDate lastDay = date.with(TemporalAdjusters.lastDayOfMonth()); //最后一天