簡介
在Java中處理日期和時間是很常見的需求,基礎的工具類就是我們熟悉的Date和Calendar,然而這些工具類的api使用並不是很方便和強大,於是就誕生了Joda-Time這個專門處理日期時間的庫。在這里記錄下使用方法,方便日后參考。
api 官網 http://www.joda.org/joda-time/apidocs/index.html?overview-summary.html
引入Maven依賴
1 <dependency> 2 <groupId>joda-time</groupId> 3 <artifactId>joda-time</artifactId> 4 <version>2.9.9</version> 5 </dependency>
核心類
使用最多的五個日期時間類:
- Instant - 不可變的類,用來表示時間軸上一個瞬時的點(時間戳)
- DateTime - 不可變的類,用來替換JDK的Calendar類
- LocalDate - 不可變的類,表示一個本地的日期,而不包含時間部分(沒有時區信息)
- LocalTime - 不可變的類,表示一個本地的時間,而不包含日期部分(沒有時區信息)
- LocalDateTime - 不可變的類,表示一個本地的日期-時間(沒有時區信息)
DateTime的使用
DateTime 是JodaTime的核心類,代表時間日期值,其構造方法多樣,即可以使用各種對象構造,亦可以使用基本類型構造,核心在於能夠確定在時間軸上的位置。。默認構造器如下所示
1 DateTime dt = new DateTime();
其他構造函數,可使用不同的構造函數快速獲取DateTime對象
1 DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour) 2 DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute) 3 DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, int millisOfSecond) 4 DateTime(long instant) 5 DateTime(Object instant)
還有一種方法就是使用靜態方法來獲取DateTime對象
1 // 獲取當前的DateTime 2 DateTime now = DateTime.now(); 3 4 // 獲取指定String值的DateTime 5 DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 6 DateTime d3 = DateTime.parse("2019-03-09 11:12:55", formatter);
DateTime中的常用屬性值獲取方法
1 getCenturyOfEra() 返回世紀單位(int) 2 getYearOfCentury() 返回世紀年份(int) 3 getYear() 返回年(int) 4 getWeekyear() 返回對應年中周數(int) 5 getMonthOfYear() 返回對應年的月數(int) 6 getDayOfYear() 返回對應年中天數(int) 7 getDayOfMonth() 返回對應月份中天數(int) 8 getDayOfWeek() 返回對應星期中天數(int) 9 getHourOfDay() 返回對應天中的小時(int) 10 getMinuteOfDay() 返回對應天中的分鍾數(int) 11 getMinuteOfHour() 返回對應小時中的分鍾數(int) 12 getSecondOfDay() 返回對應天中的秒數(int) 13 getSecondOfMinute() 返回對應分鍾中的秒數(int) 14 getMillis() 返回毫秒數(int) 15 getMillisOfDay() 返回對應天中的毫秒(int) 16 getMillisOfSecond() 返回對應秒中的毫秒(int) 17 getHourOfDay() 返回對應天中的小時(int) 18 toString(String pattern) 返回一個規定格式的String 19 20 // demo 21 // y:年,M:月,d:日,H:時,m:分,s:秒,E:星期 22 DateTime now = DateTime.now(); 23 System.out.println(now.toString("yyyy/MM/dd HH:mm:ss EE"));
DateTime中的常用方法
1 1. plus/minus開頭的方法(比如:plusDay, minusMonths):用來返回在DateTime實例上增加或減少一段時間后的實例 2 plus(long duration) 增加指定毫秒數並返回 3 plusYears(int years) 增加指定年份並返回 4 plusMonths(int months) 增加指定月份並返回 5 plusWeeks(int weeks) 增加指定星期並返回 6 plusDays(int days) 增加指定天數並返回 7 plusHours(int hours) 增加指定小時並返回 8 plusMinutes(int minutes) 增加指定分鍾並返回 9 plusSeconds(int seconds) 增加指定秒數並返回 10 plusMillis(int millis) 增加指定毫秒並返回 -與之相反的是minus前綴的 plus是增加 minus是減少 11 12 2. with開頭的方法:用來返回在DateTime實例更新指定日期單位后的實例 13 withCenturyOfEra(int centuryOfEra) 更新時間世紀單位並返回 14 withYearOfCentury(int yearOfCentury)更新世紀年並返回 15 withYear(int year) 更新時間年並返回 16 withWeekyear(int weekyear) 更新時間周數並返回 17 withMonthOfYear(int monthOfYear)更新時間月份並返回 18 withDayOfYear(int dayOfYear) 更新時間天數並返回 19 withDayOfMonth(int dayOfMonth) 更新時間天數並返回 20 withDayOfWeek(int dayOfWeek) 更新時間天數並返回 21 withHourOfDay(int hour) 更新時間小時並返回 22 withMinuteOfHour(int minute) 更新時間分鍾並返回 23 withSecondOfMinute(int second) 更新時間秒數並返回 24 withMillisOfSecond(int millis) 更新時間毫秒並返回 25 withMillisOfDay(int millis) 更新時間毫秒並返回 26 withTimeAtStartOfDay() 獲取當天最早時間 27 28 3. 判斷DateTime對象大小狀態的一些操作方法 29 compareTo(DateTime d) 比較兩時間大小 時間大於指定時間返回 1 時間小於指定時間返回-1 相等返回0 30 equals(DateTime d) 比較兩時間是否相等 31 isAfter(long instant) 判斷時間是否大於指定時間 32 isAfterNow() 判斷時間是否大於當前時間 33 isBefore(long instant) 判斷時間是否小於指定時間 34 isBeforeNow() 判斷時間是否小於當前時間 35 isEqual(long instant) 判斷時間是否等於指定時間 36 isEqualNow() 判斷時間是否等於當前時間 37 38 4. jdk date互轉 39 DateTime dt = new DateTime(new Date()); jdk的date轉換為DateTime 40 Date jdkDate = dt.toDate() 轉換為jdk的date
LocalDate的使用
LocalDate只處理年月日
默認構造器
1 LocalDate(int year, int monthOfYear, int dayOfMonth) 2 LocalDate(long instant)
方法跟DateTime方法類似,就不單獨整理了,可以去api查看詳細方法
其他拓展方法
1 daysBetween(ReadableInstant start, ReadableInstant end) 獲取兩日期相差的天數 2 hoursBetween(ReadableInstant start, ReadableInstant end) 獲取兩日期相差的小時數 3 minutesBetween(ReadableInstant start, ReadableInstant end) 獲取兩日期相差的分鍾數 4 monthsBetween(ReadableInstant start, ReadableInstant end) 獲取兩日期相差的月數 5 secondsBetween(ReadableInstant start, ReadableInstant end) 獲取兩日期相差的秒數 6 weeksBetween(ReadableInstant start, ReadableInstant end) 獲取兩日期相差的周數 7 yearsBetween(ReadableInstant start, ReadableInstant end) 獲取兩日期相差的年數 8 9 // demo 10 LocalDate start = new LocalDate(); 11 LocalDate end = new LocalDate().minusDays(1); 12 System.out.println(Days.daysBetween(start,end).getDays());
參考:https://blog.csdn.net/psh18513234633/article/details/79408096
