如何使用LocalDate實現對時間操作的簡單化
阿新 • • 發佈:2019-02-08
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就說這麼多吧,我也是剛剛學的,原創,轉載請表明出處,謝謝。