lemon
文章6
标签4
分类4
Java常用日期操作

Java常用日期操作

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);
    }
}