最近搞東西的時候要操作時間,就去網上了解一下時間操作被用的最多的幾個類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