開發中常用Java8日期和時間相關API

1、獲取某天的開始時間

    /**
     * 獲取某天的開始時間
     *
     * @param zonedDateTime
     * @return
     */
    public static ZonedDateTime getDayStartDate(ZonedDateTime zonedDateTime) {
        return zonedDateTime.toLocalDate().atStartOfDay(zonedDateTime.getZone());
    }

2、獲取某天的結束時間

    /**
     * 獲取某天的結束時間
     *
     * @param zonedDateTime
     * @return
     */
	public static ZonedDateTime getDayEndDate(ZonedDateTime zonedDateTime) {
        return LocalDateTime.of(zonedDateTime.toLocalDate(), LocalTime.MAX).atZone(zonedDateTime.getZone());
    }

以2020年3月14日爲例,獲取的日期爲2020-03-14T23:59:59.999999999+08:00[Asia/Shanghai],但是使用MyBatis操作數據庫且字段類型爲datetime時,該日期落表表中爲2020-03-15 00:00:00,所以此時採用如下方法操作日期:

    /**
     * 獲取某天的結束時間
     *
     * @param zonedDateTime
     * @return
     */
	public static ZonedDateTime getDayEndDate(ZonedDateTime zonedDateTime) {
        LocalDateTime localDateTime = zonedDateTime.toLocalDate().atTime(23, 59, 59);
        return localDateTime.atZone(zonedDateTime.getZone());
    }

3、獲取年、月、日信息

        LocalDate localDate = LocalDate.of(2020, 3, 15);
        System.out.println(localDate.getYear() + "年" + localDate.getMonthValue() + "月" + localDate.getDayOfMonth() + "號");

4、判斷兩個日期是否相等

LocalDate重載了equals()方法,可以直接拿來判斷兩個日期是否相等

        LocalDate localDate01 = LocalDate.of(2020, 3, 14);
        LocalDate localDate02 = LocalDate.now();
        System.out.println(localDate01.equals(localDate02));

5、獲取一天前/後的時間

        LocalDate now = LocalDate.now();
        System.out.println(now.plusDays(1));//獲取一天後的日期
        System.out.println(now.plus(1, ChronoUnit.DAYS));//獲取一天後的日期
        System.out.println(now.minusDays(1));//獲取一天前的日期
        System.out.println(now.minus(1, ChronoUnit.DAYS));//獲取一天前的日期

同理獲取一小時前/後的時間、一個周前/後的時間、一個月前/後的時間、一年前/後的時間

6、判斷日期是早於還是晚於另一個日期

LocalDate類有兩類方法isBefore()isAfter()用於比較日期。調用isBefore()方法時,如果給定日期小於當前日期則返回true

        LocalDate localDate01 = LocalDate.of(2020, 3, 15);
        LocalDate localDate02 = LocalDate.of(2020, 3, 14);
        System.out.println(localDate01.isAfter(localDate02));//true
        System.out.println(localDate01.isBefore(localDate02));//false

7、判斷是否是閏年

LocalDate類的isLeapYear()方法判斷該實例是否是一個閏年

        LocalDate localDate = LocalDate.of(2020, 3, 15);
        System.out.println(localDate.isLeapYear());//true

8、計算兩個日期之間差值

    /**
     * 計算兩個日期相差天數
     *
     * @param start
     * @param end
     * @return
     */
    public static long daysBetween(ZonedDateTime start, ZonedDateTime end) {
        LocalDate startDate = start.toLocalDate();
        LocalDate endDate = end.toLocalDate();
        return startDate.until(endDate, ChronoUnit.DAYS);
    }

9、獲取當月第一天和最後一天

    /**
     * 獲取當月第一天
     *
     * @param localDate
     * @return
     */
    public static LocalDate getThisMonthFirstDay(LocalDate localDate) {
        return LocalDate.of(localDate.getYear(), localDate.getMonthValue(), 1);
    }

    /**
     * 獲取當月最後一天
     *
     * @param localDate
     * @return
     */
    public static LocalDate getThisMonthLastDay(LocalDate localDate) {
        return LocalDate.of(localDate.getYear(), localDate.getMonthValue(), 1).plusMonths(1).minusDays(1);
    }
    /**
     * 獲取當月第一天
     *
     * @param localDate
     * @return
     */
    public static LocalDate getThisMonthFirstDay(LocalDate localDate) {
        return localDate.with(TemporalAdjusters.firstDayOfMonth());
    }
    
    /**
     * 獲取當月最後一天
     *
     * @param localDate
     * @return
     */
    public static LocalDate getThisMonthLastDay(LocalDate localDate) {
        return localDate.with(TemporalAdjusters.lastDayOfMonth());
    }

參考:https://blog.csdn.net/gw5205566/article/details/99673369

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章