Java常用日期操作
获取指定时间最大、最小
public class DateUtil {
/**
* 获取给定时间所在当天的最小时间(2020-10-01 00:00)
* @param date
* @return
*/
public static LocalDateTime getStartDayOfDay(LocalDate date){
Instant instant = date.atStartOfDay().toInstant(ZoneOffset.UTC);
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).with(LocalTime.MIN);
}
/**
* 获取给定时间所在当天的最大时间(2020-10-01 23:59:59)
* @param date
* @return
*/
public static LocalDateTime getEndDayOfDay(LocalDate date){
Instant instant = date.atStartOfDay().toInstant(ZoneOffset.UTC);
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()).with(LocalTime.MAX);
}
/**
* 获取给定时间所在月份的最小时间(2020-10-01 00:00)
* @param date
* @return
*/
public static LocalDateTime getStartDayOfMonth(LocalDate date){
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, date.getYear());
//设置月份
cal.set(Calendar.MONTH, date.getMonthValue() - 1);
//获取某月最小天数
int firstDay = cal.getMinimum(Calendar.DATE);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH, firstDay);
return LocalDateTime.ofInstant(cal.getTime().toInstant(), ZoneId.systemDefault()).with(LocalTime.MIN);
}
/**
* 获取给定时间所在月份的最大时间(2020-10-31 23:59:59)
* @param date
* @return
*/
public static LocalDateTime getEndDayOfMonth(LocalDate date){
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR, date.getYear());
//设置月份
cal.set(Calendar.MONTH, date.getMonthValue() - 1);
//获取某月最小天数
int firstDay = cal.getActualMaximum(Calendar.DATE);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH, firstDay);
return LocalDateTime.ofInstant(cal.getTime().toInstant(), ZoneId.systemDefault()).with(LocalTime.MAX);
}
/**
* 获取给定时间所在年份最小时间(2020-01-01 00:00)
* @param date
* @return
*/
public static LocalDateTime getStartDayOfYear(LocalDate date){
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, date.getYear());
Date currYearFirst = calendar.getTime();
return LocalDateTime.ofInstant(currYearFirst.toInstant(), ZoneId.systemDefault()).with(LocalTime.MIN);
}
/**
* 获取给定时间所在年份最大时间(2020-12-31 23:59:59)
* @param date
* @return
*/
public static LocalDateTime getEndDayOfYear(LocalDate date){
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(Calendar.YEAR, date.getYear());
calendar.roll(Calendar.DAY_OF_YEAR, -1);
Date currYearFirst = calendar.getTime();
return LocalDateTime.ofInstant(currYearFirst.toInstant(), ZoneId.systemDefault()).with(LocalTime.MAX);
}
public static void main(String[] args) {
LocalDate now = LocalDate.now();
//获取给定时间所在月份的最小时间
LocalDateTime startDayOfMonth = getStartDayOfMonth(now);
//获取给定时间所在月份的最大时间
LocalDateTime endDayOfMonth = getEndDayOfMonth(now);
//获取给定时间所在年份最小时间
LocalDateTime startDayOfYear = getStartDayOfYear(now);
//获取给定时间所在年份最小时间
LocalDateTime endDayOfYear = getEndDayOfYear(now);
//获取给定时间所在当天的最小时间
LocalDateTime startDayOfDay = getStartDayOfDay(now);
//获取给定时间所在当天的最大时间
LocalDateTime endDayOfDay = getEndDayOfDay(now);
}
}