【java8中的時間操作】java8中獲取月的最後一天或者總天數,JDK8 LocalDate AP
緣起
前面有個需求,獲取當前月和前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
這個類可以獲取第一天第一年最後一天最後一年等資訊