1. 程式人生 > >如何使用LocalDate實現對時間操作的簡單化

如何使用LocalDate實現對時間操作的簡單化

jdk8之前,java中做時間處理時一般會採用java.util.Date,大多吐槽Date的是其對於月份的處理是從0開始的,取得正確月份還得往後偏移一位。Date內容很豐富,不但包含年月日,還包含時間。jdk8之後,我們有更好的選擇 -- java.time.LocalDate。

這是jdk8中新增的日期處理類,同時新增的還有java.time.LocalTime、java.time.LocalDateTime等。

相比Date來說,LoalDate更安全、更精確也更明確。LocalDate不包含時間,只是單純的年月日,要精確到時分秒甚至毫秒的就需要用java.time.LocalDateTime了。

一些常用的方法:

//獲取點當前時間物件
LocalDate now = LocalDate.now();//輸出 : 2018-09-08

//今年是哪一年
int dayofYear = now.getDayOfYear();

//今天是哪一月
int month = now.getMonth().getValue();

// 今天是幾號
int dayofMonth = now.getDayOfMonth();

// 今天是周幾
int dayofWeek = now.getDayOfWeek().getValue();

//設定指定日期的時間物件:
LocalDate appoint = LocalDate.parse("2018-12-07");

//計算兩個日期相差多少天:
long differ = appoint.toEpochDay()-now.toEpochDay() // differ : 90

//指定天數的加減
LocalDate minus = now.minusDays(10);
System.out.println(minus);            //minus : 2018-08-29
LocalDate plus = now.plusDays(10);
System.out.println(plus);             //plus : 2018-09-18

//校驗兩個日期的前後關係
boolean flag = now.isBefore(appoint);
System.out.println(flag);             //flag : true

// 獲取取本月第1天:
LocalDate firstDayOfThisMonth = now .with(TemporalAdjusters.firstDayOfMonth())
System.out.println("firstDayOfThisMonth = " + firstDayOfThisMonth);   //2018-09-01

// 取本月第2天:
LocalDate secondDayOfThisMonth = now .withDayOfMonth(2);
System.out.println("secondDayOfThisMonth = " + secondDayOfThisMonth); //2018-09-02

// 取本月最後一天,再也不用計算是28,29,30還是31:
LocalDate lastDayOfThisMonth = now .with(TemporalAdjusters.lastDayOfMonth());
System.out.println("lastDayOfThisMonth = " + lastDayOfThisMonth);     //2018-09-30

// 取下月第一天:
LocalDate firstDayOfNextMonth = lastDayOfThisMonth.plusDays(1);
System.out.println("firstDayOfNextMonth = " + firstDayOfNextMonth);   //2018-10-01

// 取下月最後一天:
LocalDate lastDayOfNextOfMonth = firstDayOfNextMonth.with(TemporalAdjusters.lastDayOfMonth());
System.out.println("lastDayOfNextOfMonth = " + lastDayOfNextOfMonth); //2018-10-31

// 取2019年1月第一個週一,用Calendar要死掉很多腦細胞:
LocalDate special = LocalDate.parse("2019-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
System.out.println("special = " + special);                           //2019-01-07



常用API

getYear()    int    獲取當前日期的年份
getMonth()    Month    獲取當前日期的月份物件
getMonthValue()    int    獲取當前日期是第幾月
getDayOfWeek()    DayOfWeek    表示該物件表示的日期是星期幾
getDayOfMonth()    int    表示該物件表示的日期是這個月第幾天
getDayOfYear()    int    表示該物件表示的日期是今年第幾天
withYear(int year)    LocalDate    修改當前物件的年份
withMonth(int month)    LocalDate    修改當前物件的月份
withDayOfMonth(int dayOfMonth)    LocalDate    修改當前物件在當月的日期
isLeapYear()    boolean    是否是閏年
lengthOfMonth()    int    這個月有多少天
lengthOfYear()    int    該物件表示的年份有多少天(365或者366)
plusYears(long yearsToAdd)    LocalDate    當前物件增加指定的年份數
plusMonths(long monthsToAdd)    LocalDate    當前物件增加指定的月份數
plusWeeks(long weeksToAdd)    LocalDate    當前物件增加指定的週數
plusDays(long daysToAdd)    LocalDate    當前物件增加指定的天數
minusYears(long yearsToSubtract)    LocalDate    當前物件減去指定的年數
minusMonths(long monthsToSubtract)    LocalDate    當前物件減去註定的月數
minusWeeks(long weeksToSubtract)    LocalDate    當前物件減去指定的週數
minusDays(long daysToSubtract)    LocalDate    當前物件減去指定的天數
compareTo(ChronoLocalDate other)    int    比較當前物件和other物件在時間上的大小,返回值如果為正,則當前物件時間較晚,
isBefore(ChronoLocalDate other)    boolean    比較當前物件日期是否在other物件日期之前
isAfter(ChronoLocalDate other)    boolean    比較當前物件日期是否在other物件日期之後
isEqual(ChronoLocalDate other)    boolean    比較兩個日期物件是否相等

關於LocalDate就說這麼多吧,我也是剛剛學的,原創,轉載請表明出處,謝謝。