1. 程式人生 > 其它 >【java8中的時間操作】java8中獲取月的最後一天或者總天數,JDK8 LocalDate AP

【java8中的時間操作】java8中獲取月的最後一天或者總天數,JDK8 LocalDate AP

技術標籤:javajdkspark資料結構大資料

緣起

前面有個需求,獲取當前月和前5個月的最後一天,網上找了一下基本都是jdk7以前的,但實際上jdk8中有更簡單的獲取方式。

public static void main(String[] args) {
    for (int i = 0;i<6;i++){
        LocalDate today = LocalDate.now().minusMonths(i);
        //本月的第一天
        LocalDate firstday = LocalDate.of(today.getYear(),today.
getMonth(),1); //本月的最後一天 LocalDate lastDay =today.with(TemporalAdjusters.lastDayOfMonth()); System.out.println(firstday.getMonth().getValue()+"月"); System.out.println("最後一天:"+lastDay.getDayOfMonth()); System.out.println("-------------------"
); } }

輸出

2月
最後一天:28

1月
最後一天:31

12月
最後一天:31

11月
最後一天:30

10月
最後一天:31

9月
最後一天:30

其中minusMonths(n)為獲取當前時間的前N個月,對應的還有獲取前N天前N年等方法。下面列出一份完整的API
在這裡插入圖片描述

LocalDateAPI

獲取LocalDate

1.獲取當前的日期 LocalDate

LocalDate now = LocalDate.now();

2.根據年月日的值獲取 LocalDate

LocalDate.of(2016, 11, 30);

3.根據某年的第n天獲取 LocalDate

LocalDate.ofYearDay(2016, 300)

4.從時間紀元(1970年1月1日)開始第n天(負數表示在時間紀元前n天)獲取 LocalDate

LocalDate.ofEpochDay(365);

操作LocalDate

LocalDate.now().getYear(); // 年份
LocalDate.now().getMonthValue(); // 月份(數值表示, 從1開始)
LocalDate.now().getMonth(); // 月份(英文[enum]表示)
LocalDate.now().getDayOfMonth(); // 日期(從1開始)
LocalDate.now().getDayOfYear(): // 當天所在這一年的第幾天(從1開始)
LocalDate.now().getDayOfWeek(); // 星期幾
LocalDate.now().lengthOfYear(); // 當年的天數
LocalDate.now().lengthOfMonth(); //當月的天數
LocalDate.now().toEpochDay(); // 與時間紀元(1970年1月1日)相差的天數,負數表示在時間紀元之前多少天

LocalDate運算

可以對年、月、日、周進行加減法運算:
如果加(或減)日期超過當月的最大天數(或小於等於0)則月份對應增加(或減少);
如果加(或減)月份超過12(或小於等於0)則年份對應增加(或減少);
加減週數其實是對日期(天數)的加減;

1.加法

System.out.println(“加法運算”);
System.out.println(“當前:” + LocalDate.now());
System.out.println(“加1天:” + LocalDate.now().plusDays(1));
System.out.println(“加1周:” + LocalDate.now().plusWeeks(1));
System.out.println(“加1月:” + LocalDate.now().plusMonths(1));
System.out.println(“加1年:” + LocalDate.now().plusYears(1));

2.減法

System.out.println(“減法運算”);
System.out.println(“當前:” + LocalDate.now());
System.out.println(“減1天:” + LocalDate.now().minusDays(1));
System.out.println(“減1周:” + LocalDate.now().minusWeeks(1));
System.out.println(“減1月:” + LocalDate.now().minusMonths(1));
System.out.println(“減1年:” + LocalDate.now().minusYears(1));

3.替換

所有的數值必須合法;
如果當月當天是閏年2月29日,替換年份為非閏年,則會變成2月28日;

System.out.println("當前:" + LocalDate.now());  
System.out.println("替換日期為1:" + LocalDate.now().withDayOfMonth(1));  
System.out.println("替換天數為1:" + LocalDate.now().withDayOfYear(1));  
System.out.println("替換月份為1:" + LocalDate.now().withMonth(1));  
System.out.println("替換年份為1:" + LocalDate.now().withYear(1));  

LocalDate判斷

可以對兩個 LocalDate 進行比較,可以判斷一個日期是否在另一個日期之前或之後,或者判斷兩個日期是否是同年同月同日。

System.out.println(“當天:” + LocalDate.now());
System.out.println(“是否在當天之前:” + LocalDate.now().minusDays(1).isBefore(LocalDate.now()));
System.out.println(“是否在當天之後:” + LocalDate.now().plusDays(1).isAfter(LocalDate.now()));
System.out.println(“是否在當天:” + LocalDate.now().isEqual(LocalDate.now()));
System.out.println(“今年是否是閏年:” + LocalDate.now().isLeapYear());

LocalDate轉換

可以把LocalDate轉換自己想要的格式

localDate.format(DateTimeFormatter.ofPattern(“yyyy-MM-dd HH:mm:ss”));

TemporalAdjusters
在這裡插入圖片描述

這個類可以獲取第一天第一年最後一天最後一年等資訊