java.time.LocalDate的優點


  最近搞東西的時候要操作時間,就去網上了解一下時間操作被用的最多的幾個類java.util.Calendar、java.util.Date、java.time.LocalDate,這三個時間類中java.time.LocalDate是由java 8新提供的,記錄下三個類的特點。

  • java.util.Date、java.util.Calendar

  Date和Calendar不支持時區,且非線程安全。Date可讀性差,需要對其進行格式化,而且Date對時間處理比較麻煩,想獲取某年、某月、某星期之類的時間太難了,可能有人會說Date不是有getYear、getMonth等這些方法啊,獲取年月日很簡單,但要知道,Date的這些方法都被棄用了。

  • java.time.LocalDate

  LocalDate是不可變的和線程安全的時間類,且支持時區設置,它是Java 8提供的全新日期時間類。

  LocalDate的常用API:

        方法名                          返回類型                說明    
getYear()                              int              獲取當前日期的年
getMonth()                             Month            獲取當前日期的月份對象
getMonthValue()                        int              獲取當前日期的月
getDayOfWeek()                         DayOfWeek        獲取當前日期對應星期幾字段
getDayOfMonth()                        int              獲取當前日期是該月第幾天
getDayOfYear()                         int              獲取當前日期是該年第幾天
withYear(int year)                     LocalDate        修改當前日期的年份,如果修改后日期無效,
                                  將被更改為修改后日期該月的最后一個有效日期 withMonth(
int month) LocalDate 修改當前日期的月份(1-12),如果日期無效,
                                  將被更改為該月份最后一個有效日期 withDayOfMonth(
int dayOfMonth) LocalDate 修改當前日期在當月的第幾天(1-31天,根據月份不同而變化)
                                  ,如果修改后日期無效,拋出異常 isLeapYear()
boolean 是否是閏年,true:是閏年,false:平年 lengthOfMonth() int 獲取當前日期所在月份的總天數 lengthOfYear() int 獲取當前日期所在年份的總天數 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日期的大小,返回值如
                                  果為正則當前日期較大,為負則other日期較大 isBefore(ChronoLocalDate other)
boolean 獲取當前日期是否在other日期之前, isAfter(ChronoLocalDate other) boolean 獲取當前日期是否在other日期之后 isEqual(ChronoLocalDate other) boolean 獲取當前日期是否與other日期相等

  常用API方法:

LocalDate now = LocalDate.now();
System.out.println("獲取當前日期的LocalDate對象:"+now);
LocalDate date2 = LocalDate.parse("2012-02-29");
System.out.println("獲取指定字符串日期的LocalDate對象:"+date2);
int year = now.getYear();
System.out.println("getYear()獲取當前日期的年份:"+year);
Month month = now.getMonth();
System.out.println("getMonth()獲取當前日期的月份對象:"+month);
int monthNum = now.getMonthValue();
System.out.println("getMonthValue()獲取當前日期的月份:"+monthNum);
DayOfWeek dayofWeek = now.getDayOfWeek();
System.out.println("getDayOfWeek()獲取當前日期對應的星期幾字段:"+monthNum);
int dayOfMonth = now.getDayOfMonth();
System.out.println("getDayOfMonth()獲取當前日期在當前月的第幾天:"+dayOfMonth);
int dayOfYear = now.getDayOfYear();
System.out.println("getDayOfYear()獲取當前日期在當前年的第幾天:"+dayOfYear);
LocalDate nowYear = now.withYear(2013);
System.out.println("withYear()修改當前日期年份: "+nowYear);
LocalDate nowMonth = now.withMonth(3);
System.out.println("withMonth()修改當前日期月份: "+nowMonth);
LocalDate nowDayOfMonth = now.withDayOfMonth(21);
System.out.println("withDayOfMonth()修改當前日期在當月的天數: "+nowDayOfMonth);
boolean isLeapYear = now.isLeapYear();
System.out.println("isLeapYear()獲取當前日期是否是閏年: "+isLeapYear);
int lengthOfMonth = now.lengthOfMonth();
System.out.println("lengthOfMonth()獲取當前日期所在月份總天數: "+lengthOfMonth);
int lengthOfYear = now.lengthOfYear();
System.out.println("lengthOfYear()獲取當前日期所在年份總天數: "+lengthOfYear);
LocalDate nowPlusYears = now.plusYears(-2);
System.out.println("plusYears當前日期所在年份增加指定年份數:"+nowPlusYears);
LocalDate nowPlusMonths = now.plusMonths(2);
System.out.println("plusMonths當前日期所在月份增加指定月份數:"+nowPlusMonths);
LocalDate nowPlusWeeks = now.plusWeeks(2);
System.out.println("plusMonths當前日期增加指定星期周數:"+nowPlusWeeks);
LocalDate nowDays = now.plusDays(3);
System.out.println("nowDays當前日期增加指定天數:"+nowDays);
int compareTo = now.compareTo(date2);
System.out.println("compareTo比較當前日期與指定日期的大小:"+compareTo);
boolean before = now.isBefore(date2);
System.out.println("isBefore獲取當前日期是否在指定日期之前:"+before);
boolean after = now.isAfter(date2);
System.out.println("isAfter獲取當前日期是否在指定日期之后:"+after);
boolean equal = now.isEqual(date2);
System.out.println("isEqual獲取當前日期是否與指定日期相等:"+equal);

  運行結果:

獲取當前日期的LocalDate對象:2020-07-07
獲取指定字符串日期的LocalDate對象:2012-02-29
getYear()獲取當前日期的年份:2020
getMonth()獲取當前日期的月份對象:JULY
getMonthValue()獲取當前日期的月份:7
getDayOfWeek()獲取當前日期對應的星期幾字段:7
getDayOfMonth()獲取當前日期在當前月的第幾天:7
getDayOfYear()獲取當前日期在當前年的第幾天:189
withYear()修改當前日期年份: 2013-07-07
withMonth()修改當前日期月份: 2020-03-07
withDayOfMonth()修改當前日期在當月的天數: 2020-07-21
isLeapYear()獲取當前日期是否是閏年: true
lengthOfMonth()獲取當前日期所在月份總天數: 31
lengthOfYear()獲取當前日期所在年份總天數: 366
plusYears當前日期所在年份增加指定年份數:2018-07-07
plusMonths當前日期所在月份增加指定月份數:2020-09-07
plusMonths當前日期增加指定星期周數:2020-07-21
nowDays當前日期增加指定天數:2020-07-10
compareTo比較當前日期與指定日期的大小:8
isBefore獲取當前日期是否在指定日期之前:false
isAfter獲取當前日期是否在指定日期之后:true
isEqual獲取當前日期是否與指定日期相等:false

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM