Java日期总结:
1.获取每天的开始时间和结束时间
/**
* 获取每天的开始时间
* @param date
* @return
*/
public static Date getDayStartTime(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 0);//时
cal.set(Calendar.MINUTE, 0);//分
cal.set(Calendar.SECOND, 0);//秒
cal.set(Calendar.MILLISECOND, 0);//毫秒
return cal.getTime();
}
/**
* 获取每天的结束时间
* @param date
* @return
*/
public static Date getDayEndTime(Date date){
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 23);//时
cal.set(Calendar.MINUTE, 59);//分
cal.set(Calendar.SECOND, 59);//秒
cal.set(Calendar.MILLISECOND, 0);//毫秒
return cal.getTime();
}
2.获取每月的第一天和最后一天
/**
* 获取每月的第一天
* @param month
* @return
*/
public static Date getMonthStartTime(Integer month){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
//将当前日期重置为每月的第一天
cal.set(Calendar.DAY_OF_MONTH,1);
cal.set(Calendar.MONTH,(month - 1));//月
cal.set(Calendar.DATE,cal.getActualMinimum(Calendar.DATE));//天
return getDayStartTime(cal.getTime());
}
/**
* 获取每月的最后一天
* @param month
* @return
*/
public static Date getMonthEndTime(Integer month){
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.set(Calendar.DAY_OF_MONTH,1);
cal.set(Calendar.MONTH,(month - 1));//月
cal.set(Calendar.DATE,cal.getActualMaximum(Calendar.DATE));//天
return getDayEndTime(cal.getTime());
}
3.获取每年的第一天和最后一天时间
/**
* 获取某年第一天日期
*
* @param year 年份
* @return Date
*/
public Date getYearStartTime(int year) {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, year);
return getDayStartTime(cal.getTime());
}
/**
* 获取某年最后一天日期
*
* @param year 年份
* @return Date
*/
public Date getYearEndTime(int year) {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, year);
cal.roll(Calendar.DAY_OF_YEAR, -1);
return getDayEndTime(cal.getTime());
}
4.获取某个月份的所有日期:
/**
* 获取指定月份的所有日期
* @param month
* @return
*/
public static List<Date> getAllDaysByMonth(Integer month){
List<Date> list = new ArrayList<>();
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
//将当前日期重置为每月的第一天
cal.set(Calendar.DAY_OF_MONTH,1);
cal.set(Calendar.MONTH,(month - 1));//月
int subDay = cal.getActualMaximum(Calendar.DATE) - cal.getActualMinimum(Calendar.DATE) + 1;
for (int i = 1; i <= subDay; i++) {
cal.set(Calendar.HOUR_OF_DAY, 0);//时
cal.set(Calendar.MINUTE, 0);//分
cal.set(Calendar.SECOND, 0);//秒
cal.set(Calendar.MILLISECOND, 0);//毫秒
cal.set(Calendar.DATE, i);
list.add(cal.getTime());
}
return list;
}
- 获取两个日期之间的日期
/**
* 获取两个日期之间的日期
*
* @param startTime 开始时间
* @param endTime 结束时间
* @return
*/
public static List<Date> getDistanceDate(String startTime, String endTime) {
List<Date> dates = new ArrayList<>();
Date startDateTime = null;
Date endDateTime = null;
try {
startDateTime = TemplateDate.dateToStr(startTime, "yyyy-MM-dd");
endDateTime = TemplateDate.dateToStr(endTime, "yyyy-MM-dd");
} catch (BusinessException e) {
e.printStackTrace();
}
long differentDays = endDateTime.getTime() - startDateTime.getTime();
int targetDays = ((int) (differentDays / 86400000L)) + 1;
Calendar cal = Calendar.getInstance();
for (int i = 0; i < targetDays; i++) {
cal.setTime(startDateTime);
cal.add(Calendar.DATE, i);
dates.add(cal.getTime());
}
return dates;
}
public static void main(String[] args) throws BusinessException {
String s1 = "2021-05-31 17:59:01";
String s2 = "2021-04-20 17:59:01";
List<Date> distanceDate = getDistanceDate(s2, s1);
for (Date date : distanceDate) {
System.out.println(TemplateDate.dateToStr(date, null));
}
}