精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java8中時間日期庫的20個常用使用示例

移動開發 移動應用
除了lambda表達式,stream以及幾個小的改進之外,Java 8還引入了一套全新的時間日期API,在本篇教程中我們將通過幾個簡單的任務示例來學習如何使用Java 8的這套API。Java對日期,日歷及時間的處理一直以來都飽受詬病,尤其是它決定將java.util.Date定義為可修改的以及將SimpleDateFormat實現成非線程安全的。

[[177393]]

除了lambda表達式,stream以及幾個小的改進之外,Java 8還引入了一套全新的時間日期API,在本篇教程中我們將通過幾個簡單的任務示例來學習如何使用Java 8的這套API。Java對日期,日歷及時間的處理一直以來都飽受詬病,尤其是它決定將java.util.Date定義為可修改的以及將SimpleDateFormat實現成非線程安全的。看來Java已經意識到需要為時間及日期功能提供更好的支持了,這對已經習慣使用Joda時間日期庫的社區而言也是件好事。關于這個新的時間日期庫的最大的優點就在于它定義清楚了時間日期相關的一些概念,比方說,瞬時時間(Instant),持續時間(duration),日期(date),時間(time),時區(time-zone)以及時間段(Period)。同時它也借鑒了Joda庫的一些優點,比如將人和機器對時間日期的理解區分開的。Java 8仍然延用了ISO的日歷體系,并且與它的前輩們不同,java.time包中的類是不可變且線程安全的。新的時間及日期API位于java.time包中,下面是里面的一些關鍵的類:

  • Instant——它代表的是時間戳
  • LocalDate——不包含具體時間的日期,比如2014-01-14。它可以用來存儲生日,周年紀念日,入職日期等。
  • LocalTime——它代表的是不含日期的時間
  • LocalDateTime——它包含了日期及時間,不過還是沒有偏移信息或者說時區。
  • ZonedDateTime——這是一個包含時區的完整的日期時間,偏移量是以UTC/格林威治時間為基準的。

新的庫還增加了ZoneOffset及Zoned,可以為時區提供更好的支持。有了新的DateTimeFormatter之后日期的解析及格式化也變得煥然一新了。隨便提一句,我是在去年這個時候Java正要推出這個新功能時寫的這篇文章,所以你會發現示例中的時間都還是去年的。你運行下這些例子,它們返回的值肯定都是正確的。

Java 8是如何處理時間及日期的

有人問我學習一個新庫的最佳途徑是什么?我的回答是,就是在實際項目中那樣去使用它。在一個真實的項目中會有各種各樣的需求,這會促使開發人員去探索和研究這個新庫。簡言之,只有任務本身才會真正促使你去探索及學習。java 8的新的日期及時間API也是一樣。為了學習Java 8的這個新庫,這里我創建了20個以任務為導向的例子。我們先從一個簡單的任務開始,比如說如何用Java 8的時間日期庫來表示今天,接著再進一步生成一個帶時間及時區的完整日期,然后再研究下如何完成一些更實際的任務,比如說開發一個提醒類的應用,來找出距離一些特定日期比如生日,周日紀念日,下一個帳單日,下一個溢價日或者信用卡過期時間還有多少天。

示例1 如何 在Java 8中獲取當天的日期

Java 8中有一個叫LocalDate的類,它能用來表示今天的日期。這個類與java.util.Date略有不同,因為它只包含日期,沒有時間。因此,如果你只需要表示日期而不包含時間,就可以使用它。

  1. LocalDate today = LocalDate.now(); System.out.println("Today's Local date : " + today); 
  2.   
  3. Output 
  4. Today's Local date : 2014-01-14  

你可以看到它創建了今天的日期卻不包含時間信息。它還將日期格式化完了再輸出出來,不像之前的Date類那樣,打印出來的數據都是未經格式化的。

示例2 如何在Java 8中獲取當前的年月日

LocalDate類中提供了一些很方便的方法可以用于提取出年月日以及其它的日期屬性。使用這些方法,你可以獲取到任何你所需要的日期屬性,而不再需要使用java.util.Calendar這樣的類了:

  1. LocalDate today = LocalDate.now(); 
  2. int year = today.getYear(); 
  3. int month = today.getMonthValue(); 
  4. int day = today.getDayOfMonth(); 
  5. System.out.printf("Year : %d Month : %d day : %d \t %n"yearmonthday); 
  6.   
  7. Output 
  8. Today's Local date : 2014-01-14 
  9. Year : 2014 Month : 1 day : 14  

可以看到,在Java 8中獲取年月信息非常簡單,只需使用對應的getter方法就好了,無需記憶,非常直觀。你可以拿它和Java中老的獲取當前年月日的寫法進行一下比較。

示例3 在Java 8中如何獲取某個特定的日期

在第一個例子中,我們看到通過靜態方法now()來生成當天日期是非常簡單的,不過通過另一個十分有用的工廠方法LocalDate.of(),則可以創建出任意一個日期,它接受年月日的參數,然后返回一個等價的LocalDate實例。關于這個方法還有一個好消息就是它沒有再犯之前API中的錯,比方說,年只能從1900年開始,月必須從0開始,等等。這里的日期你寫什么就是什么,比如說,下面這個例子中它代表的就是1月14日,沒有什么隱藏邏輯。

  1. LocalDate dateOfBirth = LocalDate.of(2010, 01, 14); 
  2. System.out.println("Your Date of birth is : " + dateOfBirth); 
  3.   
  4. Output : Your Date of birth is : 2010-01-14  

可以看出,創建出來的日期就是我們所寫的那樣,2014年1月14日。

示例4 在Java 8中如何檢查兩個日期是否相等

如果說起現實中實際的處理時間及日期的任務,有一個常見的就是要檢查兩個日期是否相等。你可能經常會碰到要判斷今天是不是某個特殊的日子,比如生日啊,周年紀念日啊,或者假期之類。有的時候,會給你一個日期,讓你檢查它是不是某個日子比方說假日。下面這個例子將會幫助你在Java 8中完成這類任務。正如你所想的那樣,LocalDate重寫了equals方法來進行日期的比較,如下所示:

  1. LocalDate date1 = LocalDate.of(2014, 01, 14); if(date1.equals(today)){ 
  2.  System.out.printf("Today %s and date1 %s are same date %n", today, date1); 
  3.   
  4. Output 
  5. today 2014-01-14 and date1 2014-01-14 are same date  

在本例中我們比較的兩個日期是相等的。同時,如果在代碼中你拿到了一個格式化好的日期串,你得先將它解析成日期然后才能比較。你可以將這個例子與Java之前比較日期的方式進行下比較,你會發現它真是爽多了。

示例5 在Java 8中如何檢查重復事件,比如說生日

在Java中還有一個與時間日期相關的實際任務就是檢查重復事件,比如說每月的帳單日,結婚紀念日,每月還款日或者是每年交保險費的日子。如果你在一家電商公司工作的話,那么肯定會有這么一個模塊,會去給用戶發送生日祝福并且在每一個重要的假日給他們捎去問候,比如說圣誕節,感恩節,在印度則可能是萬燈節(Deepawali)。如何在Java中判斷是否是某個節日或者重復事件?使用MonthDay類。這個類由月日組合,不包含年信息,也就是說你可以用它來代表每年重復出現的一些日子。當然也有一些別的組合,比如說YearMonth類。它和新的時間日期庫中的其它類一樣也都是不可變且線程安全的,并且它還是一個值類(value class)。我們通過一個例子來看下如何使用MonthDay來檢查某個重復的日期:

  1. LocalDate dateOfBirth = LocalDate.of(2010, 01, 14); 
  2. MonthDay birthday = MonthDay.of(dateOfBirth.getMonth(), dateOfBirth.getDayOfMonth()); 
  3. MonthDay currentMonthDay = MonthDay.from(today); 
  4. if(currentMonthDay.equals(birthday)){ 
  5.      System.out.println("Many Many happy returns of the day !!"); 
  6. }else
  7.      System.out.println("Sorry, today is not your birthday"); 
  8.   
  9. Output: Many Many happy returns of the day !!  

雖然年不同,但今天就是生日的那天,所以在輸出那里你會看到一條生日祝福。你可以調整下系統的時間再運行下這個程序看看它是否能提醒你下一個生日是什么時候,你還可以試著用你的下一個生日來編寫一個JUnit單元測試看看代碼能否正確運行。

示例6 如何在Java 8中獲取當前時間

這與第一個例子中獲取當前日期非常相似。這次我們用的是一個叫LocalTime的類,它是沒有日期的時間,與LocalDate是近親。這里你也可以用靜態工廠方法now()來獲取當前時間。默認的格式是hh:mm:ss:nnn,這里的nnn是納秒。可以和Java 8以前如何獲取當前時間做一下比較。

  1. LocalTime time = LocalTime.now(); System.out.println("local time now : " + time); 
  2.   
  3. Output 
  4. local time now : 16:33:33.369 // in hour, minutes, seconds, nano seconds  

可以看到,當前時間是不包含日期的,因為LocalTime只有時間,沒有日期。

示例7 如何增加時間里面的小時數

很多時候我們需要增加小時,分或者秒來計算出將來的時間。Java 8不僅提供了不可變且線程安全的類,它還提供了一些更方便的方法譬如plusHours()來替換原來的add()方法。順便說一下,這些方法返回的是一個新的LocalTime實例的引用,因為LocalTime是不可變的,可別忘了存儲好這個新的引用。

  1. LocalTime time = LocalTime.now(); 
  2. LocalTime newTime = time.plusHours(2); // adding two hours 
  3. System.out.println("Time after 2 hours : " + newTime); 
  4.   
  5. Output : 
  6. Time after 2 hours : 18:33:33.369  

可以看到當前時間2小時后是16:33:33.369。現在你可以將它和Java中增加或者減少小時的老的方式進行下比較。一看便知哪種方式更好。

示例8 如何獲取1周后的日期

這與前一個獲取2小時后的時間的例子類似,這里我們將學會如何獲取到1周后的日期。LocalDate是用來表示無時間的日期的,它有一個plus()方法可以用來增加日,星期,或者月,ChronoUnit則用來表示這個時間單位。由于LocalDate也是不可變的,因此任何修改操作都會返回一個新的實例,因此別忘了保存起來。

  1. LocalDate nextWeek = today.plus(1, ChronoUnit.WEEKS); 
  2. System.out.println("Today is : " + today); 
  3. System.out.println("Date after 1 week : " + nextWeek); 
  4.   
  5. Output
  6. Today is : 2014-01-14 
  7. Date after 1 week : 2014-01-21  

可以看到7天也就是一周后的日期是什么。你可以用這個方法來增加一個月,一年,一小時,一分鐘,甚至是十年,查看下Java API中的ChronoUnit類來獲取更多選項。

示例9 一年前后的日期

這是上個例子的續集。上例中,我們學習了如何使用LocalDate的plus()方法來給日期增加日,周或者月,現在我們來學習下如何用minus()方法來找出一年前的那天。 

  1. LocalDate previousYear = today.minus(1, ChronoUnit.YEARS); 
  2. System.out.println("Date before 1 year : " + previousYear); 
  3. LocalDate nextYear = today.plus(1, YEARS); 
  4. System.out.println("Date after 1 year : " + nextYear); 
  5.   
  6. Output
  7. Date before 1 year : 2013-01-14 
  8. Date after 1 year : 2015-01-14  

可以看到現在一共有兩年,一個是2013年,一個是2015年,分別是2014的前后那年。

示例10 在Java 8中使用時鐘

Java 8中自帶了一個Clock類,你可以用它來獲取某個時區下當前的瞬時時間,日期或者時間。可以用Clock來替代System.currentTimeInMillis()與 TimeZone.getDefault()方法。

  1. // Returns the current time based on your system clock and set to UTC. 
  2. Clock clock = Clock.systemUTC(); 
  3. System.out.println("Clock : " + clock); 
  4.   
  5. // Returns time based on system clock zone Clock defaultClock = 
  6. Clock.systemDefaultZone(); 
  7. System.out.println("Clock : " + clock); 
  8.   
  9. Output
  10. Clock : SystemClock[Z] 
  11. Clock : SystemClock[Z]  

你可以用指定的日期來和這個時鐘進行比較,比如下面這樣:

  1. public class MyClass { 
  2.      private Clock clock; // dependency inject ... 
  3.   
  4.      public void process(LocalDate eventDate) { 
  5.   
  6.           if(eventDate.isBefore(LocalDate.now(clock)) { 
  7.                  ... 
  8.           } 
  9.      } 
  10.  

如果你需要對不同時區的日期進行處理的話這是相當方便的。

示例11 在Java中如何判斷某個日期是在另一個日期的前面還是后面

這也是實際項目中常見的一個任務。你怎么判斷某個日期是在另一個日期的前面還是后面,或者正好相等呢?在Java 8中,LocalDate類有一個isBefore()和isAfter()方法可以用來比較兩個日期。如果調用方法的那個日期比給定的日期要早的話,isBefore()方法會返回true。

  1. LocalDate tomorrow = LocalDate.of(2014, 1, 15); 、if(tommorow.isAfter(today)){ 
  2.      System.out.println("Tomorrow comes after today"); 
  3. LocalDate yesterday = today.minus(1, DAYS); 
  4. if(yesterday.isBefore(today)){ 
  5.      System.out.println("Yesterday is day before today"); 
  6.   
  7. Output
  8. Tomorrow comes after today 
  9. Yesterday is day before today  

可以看到在Java 8中進行日期比較非常簡單。不需要再用像Calendar這樣的另一個類來完成類似的任務了。

示例12 在Java 8中處理不同的時區

Java 8不僅將日期和時間進行了分離,同時還有時區。現在已經有好幾組與時區相關的類了,比如ZonId代表的是某個特定的時區,而ZonedDateTime代表的是帶時區的時間。它等同于Java 8以前的GregorianCalendar類。使用這個類,你可以將本地時間轉換成另一個時區中的對應時間,比如下面這個例子:

  1. // Date and time with timezone in Java 8 ZoneId america = ZoneId.of("America/New_York"); 
  2. LocalDateTime localtDateAndTime = LocalDateTime.now(); 
  3. ZonedDateTime dateAndTimeInNewYork = ZonedDateTime.of(localtDateAndTime, america ); 
  4. System.out.println("Current date and time in a particular timezone : " + dateAndTimeInNewYork); 
  5.   
  6. Output : 
  7. Current date and time in a particular timezone : 2014-01-14T16:33:33.373-05:00[America/New_York]  

可以拿它跟之前將本地時間轉換成GMT時間的方式進行下比較。順便說一下,正如Java 8以前那樣,對應時區的那個文本可別弄錯了,否則你會碰到這么一個異常:

  1. Exception in thread "main" java.time.zone.ZoneRulesException: Unknown time-zone ID: ASIA/Tokyo 
  2.  at java.time.zone.ZoneRulesProvider.getProvider(ZoneRulesProvider.java:272) 
  3.  at java.time.zone.ZoneRulesProvider.getRules(ZoneRulesProvider.java:227) 
  4.  at java.time.ZoneRegion.ofId(ZoneRegion.java:120) 
  5.  at java.time.ZoneId.of(ZoneId.java:403) 
  6.  at java.time.ZoneId.of(ZoneId.java:351)  

示例13 如何表示固定的日期,比如信用卡過期時間

正如MonthDay表示的是某個重復出現的日子的,YearMonth又是另一個組合,它代表的是像信用卡還款日,定期存款到期日,options到期日這類的日期。你可以用這個類來找出那個月有多少天,lengthOfMonth()這個方法返回的是這個YearMonth實例有多少天,這對于檢查2月到底是28天還是29天可是非常有用的。 

  1. YearMonth currentYearMonth = YearMonth.now(); System.out.printf("Days in month year %s: %d%n", currentYearMonth, currentYearMonth.lengthOfMonth()); 
  2. YearMonth creditCardExpiry = YearMonth.of(2018, Month.FEBRUARY); 
  3. System.out.printf("Your credit card expires on %s %n", creditCardExpiry); 
  4.   
  5. Output
  6. Days in month year 2014-01: 31 
  7. Your credit card expires on 2018-02  

示例14 如何在Java 8中檢查閏年

這并沒什么復雜的,LocalDate類有一個isLeapYear()的方法能夠返回當前LocalDate對應的那年是否是閏年。如果你還想重復造輪子的話,可以看下這段代碼,這是純用Java編寫的判斷某年是否是閏年的邏輯。 

  1. if(today.isLeapYear()){ 
  2.      System.out.println("This year is Leap year"); 
  3. }else { 
  4.      System.out.println("2014 is not a Leap year"); 
  5.   
  6. Output: 2014 is not a Leap year  

你可以多檢查幾年看看結果是否正確,最好寫一個單元測試來對正常年份和閏年進行下測試。

示例15 兩個日期之間包含多少天,多少個月

還有一個常見的任務就是計算兩個給定的日期之間包含多少天,多少周或者多少年。你可以用java.time.Period類來完成這個功能。在下面這個例子中,我們將計算當前日期與將來的一個日期之前一共隔著幾個月。

  1. LocalDate java8Release = LocalDate.of(2014, Month.MARCH, 14); 
  2. Period periodToNextJavaRelease = 
  3. Period.between(today, java8Release); 
  4. System.out.println("Months left between today and Java 8 release : " + periodToNextJavaRelease.getMonths() ); 
  5.   
  6. Output
  7. Months left between today and Java 8 release : 2  

可以看到,本月是1月,而Java 8的發布日期是3月,因此中間隔著2個月。

示例16 帶時區偏移量的日期與時間

在Java 8里面,你可以用ZoneOffset類來代表某個時區,比如印度是GMT或者UTC5:30,你可以使用它的靜態方法ZoneOffset.of()方法來獲取對應的時區。只要獲取到了這個偏移量,你就可以拿LocalDateTime和這個偏移量創建出一個OffsetDateTime。

  1. LocalDateTime datetime = LocalDateTime.of(2014, Month.JANUARY, 14, 19, 30); 
  2. ZoneOffset offset = ZoneOffset.of("+05:30"); 
  3. OffsetDateTime date = OffsetDateTime.of(datetime, offset); 
  4. System.out.println("Date and Time with timezone offset in Java : " + date); 
  5.   
  6. Output : 
  7. Date and Time with timezone offset in Java : 2014-01-14T19:30+05:30  

可以看到現在時間日期與時區是關聯上了。還有一點就是,OffSetDateTime主要是給機器來理解的,如果是給人看的,可以使用ZoneDateTime類。

示例17 在Java 8中如何獲取當前時間戳

如果你還記得在Java 8前是如何獲取當前時間戳的,那現在這簡直就是小菜一碟了。Instant類有一個靜態的工廠方法now()可以返回當前時間戳,如下:

  1. Instant timestamp = Instant.now(); 
  2. System.out.println("What is value of this instant " + timestamp); 
  3.   
  4. Output : 
  5. What is value of this instant 2014-01-14T08:33:33.379Z  

可以看出,當前時間戳是包含日期與時間的,與java.util.Date很類似,事實上Instant就是Java 8前的Date,你可以使用這兩個類中的方法來在這兩個類型之間進行轉換,比如Date.from(Instant)是用來將Instant轉換成java.util.Date的,而Date.toInstant()是將Date轉換成Instant的。

示例18 如何在Java 8中使用預定義的格式器來對日期進行解析/格式化

在Java 8之前,時間日期的格式化可是個技術活,我們的好伙伴SimpleDateFormat并不是線程安全的,而如果用作本地變量來格式化的話又顯得有些笨重。多虧了線程本地變量,這使得它在多線程環境下也算有了用武之地,但Java維持這一狀態也有很長一段時間了。這次它引入了一個全新的線程安全的日期與時間格式器。它還自帶了一些預定義好的格式器,包含了常用的日期格式。比如說,本例 中我們就用了預定義的BASICISODATE格式,它會將2014年2月14日格式化成20140114。

  1. String dayAfterTommorrow = "20140116"
  2. LocalDate formatted = LocalDate.parse(dayAfterTommorrow, 
  3. DateTimeFormatter.BASIC_ISO_DATE); 
  4. System.out.printf("Date generated from String %s is %s %n", dayAfterTommorrow, formatted); 
  5.   
  6. Output : 
  7. Date generated from String 20140116 is 2014-01-16  

你可以看到生成的日期與指定字符串的值是匹配的,就是日期格式上略有不同。

示例19 如何在Java中使用自定義的格式器來解析日期

在上例中,我們使用了內建的時間日期格式器來解析日期字符串。當然了,預定義的格式器的確不錯但有時候你可能還是需要使用自定義的日期格式,這個時候你就得自己去創建一個自定義的日期格式器實例了。下面這個例子中的日期格式是”MMM dd yyyy”。你可以給DateTimeFormatter的ofPattern靜態方法()傳入任何的模式,它會返回一個實例,這個模式的字面量與前例中是相同的。比如說M還是代表月,而m仍是分。無效的模式會拋出DateTimeParseException異常,但如果是邏輯上的錯誤比如說該用M的時候用成m,這樣就沒辦法了。 

  1. String goodFriday = "Apr 18 2014"
  2. try { 
  3.     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy"); 
  4.     LocalDate holiday = LocalDate.parse(goodFriday, formatter); 
  5.     System.out.printf("Successfully parsed String %s, date is %s%n", goodFriday, holiday); 
  6. } catch (DateTimeParseException ex) { 
  7.     System.out.printf("%s is not parsable!%n", goodFriday); 
  8.     ex.printStackTrace(); 
  9.   
  10. Output : 
  11. Successfully parsed String Apr 18 2014, date is 2014-04-18  

可以看到日期的值與傳入的字符串的確是相符的,只是格式不同。

示例20 如何在Java 8中對日期進行格式化,轉換成字符串

在上兩個例子中,盡管我們用到了DateTimeFormatter類但我們主要是進行日期字符串的解析。在這個例子中我們要做的事情正好相反。這里我們有一個LocalDateTime類的實例,我們要將它轉換成一個格式化好的日期串。這是目前為止Java中將日期轉換成字符串最簡單便捷的方式了。下面這個例子將會返回一個格式化好的字符串。與前例相同的是,我們仍需使用指定的模式串去創建一個DateTimeFormatter類的實例,但調用的并不是LocalDate類的parse方法,而是它的format()方法。這個方法會返回一個代表當前日期的字符串,對應的模式就是傳入的DateTimeFormatter實例中所定義好的。 

  1. LocalDateTime arrivalDate = LocalDateTime.now(); 
  2. try { 
  3.     DateTimeFormatter format = DateTimeFormatter.ofPattern("MMM dd yyyy hh:mm a"); 
  4.     String landing = arrivalDate.format(format); 
  5.     System.out.printf("Arriving at : %s %n", landing); 
  6.  } catch (DateTimeException ex) { 
  7.     System.out.printf("%s can't be formatted!%n", arrivalDate); 
  8.     ex.printStackTrace(); 
  9.   
  10. Output : Arriving at : Jan 14 2014 04:33 PM  

可以看到,當前時間是用給定的”MMM dd yyyy hh:mm a”模式來表示的,它包含了三個字母表示的月份以及用AM及PM來表示的時間。

Java 8中日期與時間API的幾個關鍵點

看完了這些例子后,我相信你已經對Java 8這套新的時間日期API有了一定的了解了。現在我們來回顧下關于這個新的API的一些關鍵的要素。

  1. 它提供了javax.time.ZoneId用來處理時區。
  2. 它提供了LocalDate與LocalTime類
  3. Java 8中新的時間與日期API中的所有類都是不可變且線程安全的,這與之前的Date與Calendar API中的恰好相反,那里面像java.util.Date以及SimpleDateFormat這些關鍵的類都不是線程安全的。
  4. 新的時間與日期API中很重要的一點是它定義清楚了基本的時間與日期的概念,比方說,瞬時時間,持續時間,日期,時間,時區以及時間段。它們都是基于ISO日歷體系的。
  5. 每個Java開發人員都應該至少了解這套新的API中的這五個類:
    1. Instant 它代表的是時間戳,比如2014-01-14T02:20:13.592Z,這可以從java.time.Clock類中獲取,像這樣: Instant current = Clock.system(ZoneId.of(“Asia/Tokyo”)).instant();
    2. LocalDate 它表示的是不帶時間的日期,比如2014-01-14。它可以用來存儲生日,周年紀念日,入職日期等。
    3. LocalTime – 它表示的是不帶日期的時間
    4. LocalDateTime – 它包含了時間與日期,不過沒有帶時區的偏移量
    5. ZonedDateTime – 這是一個帶時區的完整時間,它根據UTC/格林威治時間來進行時區調整
  6. 這個庫的主包是java.time,里面包含了代表日期,時間,瞬時以及持續時間的類。它有兩個子package,一個是java.time.foramt,這個是什么用途就很明顯了,還有一個是java.time.temporal,它能從更低層面對各個字段進行訪問。
  7. 時區指的是地球上共享同一標準時間的地區。每個時區都有一個唯一標識符,同時還有一個地區/城市(Asia/Tokyo)的格式以及從格林威治時間開始的一個偏移時間。比如說,東京的偏移時間就是+09:00。
  8. OffsetDateTime類實際上包含了LocalDateTime與ZoneOffset。它用來表示一個包含格林威治時間偏移量(+/-小時:分,比如+06:00或者 -08:00)的完整的日期(年月日)及時間(時分秒,納秒)。
  9. DateTimeFormatter類用于在Java中進行日期的格式化與解析。與SimpleDateFormat不同,它是不可變且線程安全的,如果需要的話,可以賦值給一個靜態變量。DateTimeFormatter類提供了許多預定義的格式器,你也可以自定義自己想要的格式。當然了,根據約定,它還有一個parse()方法是用于將字符串轉換成日期的,如果轉換期間出現任何錯誤,它會拋出DateTimeParseException異常。類似的,DateFormatter類也有一個用于格式化日期的format()方法,它出錯的話則會拋出DateTimeException異常。
  10. 再說一句,“MMM d yyyy”與“MMm dd yyyy”這兩個日期格式也略有不同,前者能識別出”Jan 2 2014″與”Jan 14 2014″這兩個串,而后者如果傳進來的是”Jan 2 2014″則會報錯,因為它期望月份處傳進來的是兩個字符。為了解決這個問題,在天為個位數的情況下,你得在前面補0,比如”Jan 2 2014″應該改為”Jan 02 2014″。

關于Java 8這個新的時間日期API就講到這了。這幾個簡短的示例 對于理解這套新的API中的一些新增類已經足夠了。由于它是基于實際任務來講解的,因此后面再遇到Java中要對時間與日期進行處理的工作時,就不用再四處尋找了。我們學習了如何創建與修改日期實例。我們還了解了純日期,日期加時間,日期加時區的區別,知道如何比較兩個日期,如何找到某天到指定日期比如說下一個生日,周年紀念日或者保險日還有多少天。我們還學習了如何在Java 8中用線程安全的方式對日期進行解析及格式化,而無需再使用線程本地變量或者第三方庫這種取巧的方式。新的API能勝任任何與時間日期相關的任務。

責任編輯:龐桂玉 來源: Android開發中文站
相關推薦

2020-12-01 07:18:35

Java8日期時間

2018-06-13 15:48:21

Spring BootJava 8API

2014-12-22 10:14:31

Java8

2024-05-15 08:59:52

Python編程

2021-03-18 10:12:54

JavaCompletable字符串

2024-01-18 15:34:58

Windows操作系統

2024-02-20 08:09:51

Java 8DateUtilsDate工具類

2023-01-10 08:27:35

Java8APIJava

2024-03-18 00:00:00

CalendaJava8Date

2025-06-18 08:15:00

Python開源

2010-04-30 16:02:45

Unix操作系統

2023-03-15 17:37:26

Java8ListMap

2010-05-27 13:26:20

MySQL日期時間函數

2020-02-06 11:35:58

Java 8APIJava

2020-01-15 15:12:38

Java8日期處理代碼

2010-06-09 10:35:36

MySQL使用管理命令

2025-07-18 13:00:33

Java8并行流線程

2015-12-25 14:53:00

Ubuntu面板格式

2014-04-11 12:49:00

Java8Java8教程

2025-09-25 17:04:18

點贊
收藏

51CTO技術棧公眾號

亚洲 欧美 日韩 在线| 国产草草浮力影院| 伊人福利在线| 9色porny自拍视频一区二区| 国产ts人妖一区二区三区| 国产三级在线观看完整版| 日韩一级淫片| 色94色欧美sute亚洲线路二| 艳母动漫在线观看| 欧美日韩国产中文字幕在线| 国产一区二区视频在线| 欧美在线视频一区二区| 国产第一页浮力| 特黄特色欧美大片| 日韩亚洲电影在线| 蜜臀视频一区二区三区| 丁香花视频在线观看| 国产精品入口麻豆原神| 激情小说综合区| aa视频在线免费观看| 丝袜a∨在线一区二区三区不卡| 最近中文字幕日韩精品| 国产一级二级在线观看| 视频一区国产| 欧美色精品在线视频| 国产免费黄色av| 污污的视频在线观看| 国产精品剧情在线亚洲| 免费日韩电影在线观看| 刘亦菲毛片一区二区三区| 精品亚洲免费视频| 国产精品扒开腿做爽爽爽视频| 国产精品久久久免费视频| 一本一道久久a久久精品蜜桃| 夜夜躁日日躁狠狠久久88av| 国产ts丝袜人妖系列视频 | 色综合久久久久综合体桃花网| 久久免费一级片| 男人影院在线观看| 国产欧美精品在线观看| 日本一区二区在线视频| 视频一区二区三区国产| eeuss影院一区二区三区| 国产精华一区| 亚洲精品成av人片天堂无码| 国产专区综合网| 91精品久久久久久久久久入口| 伊人成年综合网| 日韩—二三区免费观看av| 97久久精品国产| 日本少妇裸体做爰| 日韩视频三区| 97超碰蝌蚪网人人做人人爽 | 极品av少妇一区二区| 久久久久久久久久久人体| 黄色一级视频免费| 亚洲精品偷拍| 97视频人免费观看| 国产精品一区二区三区四| 欧美一级视频| 国产精品高潮呻吟久久av无限| 精品久久久久久久久久久久久久久久久久 | 丁香婷婷综合网| 成人午夜电影在线播放| 国产91绿帽单男绿奴| 本田岬高潮一区二区三区| 国内不卡一区二区三区| 日韩在线免费看| 国产欧美日韩在线观看| 中文字幕一区二区三区精彩视频| 天堂中文8资源在线8| 亚洲三级理论片| 青青草国产免费| 成人欧美大片| 欧美日韩黄色一区二区| 日本黄色www| 日本韩国欧美超级黄在线观看| 亚洲乱码一区二区| 欧美性生给视频| 亚洲成人资源| 国产精品爱久久久久久久| 国产丝袜视频在线观看| www.激情成人| 中文字幕免费在线不卡| www视频在线观看| 91福利精品视频| 91亚洲一区二区| 天堂日韩电影| 日韩亚洲欧美中文高清在线| 久久精品女人毛片国产| 性欧美xxxx大乳国产app| 成人午夜激情网| 天天在线女人的天堂视频| 国产精品久久毛片av大全日韩| 免费观看亚洲视频| 国模套图日韩精品一区二区| 91精品免费在线| 欧美一区二区三区成人精品| 香蕉综合视频| 欧美综合在线第二页| 国产欧美综合视频| 久久亚洲春色中文字幕久久久| 91麻豆天美传媒在线| 成人软件在线观看| 精品国产网站在线观看| jizz日本在线播放| 国产一区二区三区久久| 97中文在线| 91xxx在线观看| 欧美日韩一区二区三区| 麻豆免费在线观看视频| 成人影院在线| 欧美亚洲成人网| 欧美视频一二区| 亚洲天堂a在线| 日本久久久久久久久久久久| 日本亚洲不卡| 亚洲成人动漫av| 国产淫片av片久久久久久| 在线综合色站| 久久视频国产精品免费视频在线 | 一区二区精品| 999视频在线免费观看| www.黄在线观看| 精品久久久久久久中文字幕| 性xxxxxxxxx| 91精品久久久久久久蜜月| 国产精品久久久久久久久影视 | 丝袜亚洲另类欧美重口| 无码人妻av免费一区二区三区| 成人一区在线观看| 青青视频免费在线| 宅男噜噜噜66国产精品免费| 伊人久久久久久久久久久| 中文字幕第15页| 99久久综合99久久综合网站| 韩日视频在线观看| 动漫视频在线一区| 久久免费视频这里只有精品| 草草视频在线播放| 亚洲小说欧美激情另类| 亚洲av无一区二区三区久久| 一二三区不卡| 粉嫩av一区二区三区免费观看 | 日本不卡视频在线播放| 五十路在线观看| 欧美日韩国产页| 人人妻人人澡人人爽人人精品| 在线观看一区| 免费观看成人在线| 日本综合字幕| 在线播放精品一区二区三区| 中文字幕乱码中文字幕| 中文字幕av一区二区三区高| 岛国av在线免费| 91亚洲国产高清| 亚洲综合大片69999| 肉体视频在线| 亚洲精品久久久久久久久久久久久 | 国产视频欧美| 欧美日韩国产高清视频| 亚洲综合在线电影| 色偷偷噜噜噜亚洲男人的天堂| 一区二区国产欧美| 亚洲精品免费在线| 免费黄色三级网站| 天堂午夜影视日韩欧美一区二区| 亚洲精品9999| 亚洲不卡视频| 欧美一级黑人aaaaaaa做受| 国产三级电影在线| 欧美精品丝袜中出| 久久久国产精华液| 久久综合久久久久88| 中文字幕av不卡在线| 欧美jizzhd精品欧美巨大免费| 国产一区二区三区高清| 3d欧美精品动漫xxxx无尽| 色偷偷88888欧美精品久久久| www.亚洲欧美| 91精品福利视频| 免费在线观看h片| 91久色porny| 免费成年人高清视频| 影音先锋在线一区| 亚洲 国产 日韩 综合一区| 日韩一区二区三区精品| 国产aⅴ夜夜欢一区二区三区| 国产不卡在线| 亚洲欧美国产另类| 国产黄色高清视频| 91久久线看在观草草青青| 九九九免费视频| 国产欧美日韩三区| 麻豆精品国产传媒av| 麻豆精品视频在线观看视频| 国产 日韩 亚洲 欧美| 欧美激情国产在线| 久久综合一区二区三区| 免费看日产一区二区三区| 国产mv久久久| 啊啊啊久久久| 久久成人18免费网站| 天天射天天色天天干| 欧美日韩国产一区| 亚洲图片在线视频| 亚洲午夜久久久久中文字幕久| avhd101老司机| 91丝袜美腿高跟国产极品老师| 91插插插影院| 男人的天堂久久精品| 中文字幕无码精品亚洲35| 中文字幕日韩一区二区不卡| 亚洲 日韩 国产第一区| 天堂网av成人| 精品乱码一区二区三区| 亚洲一区二区三区四区电影| 国产精品一区二区3区| 欧美xxx视频| 91精品国产乱码久久久久久久久 | 又色又爽又黄18网站| 久久99国产精品久久99| 国产精品久久久毛片| 天堂在线亚洲视频| 亚洲精品无码久久久久久| 亚洲经典三级| 国产日韩亚洲欧美在线| 中文字幕一区二区三区欧美日韩 | 国产午夜精品理论片a级探花| 亚洲av无码乱码国产精品久久| 在线播放日韩导航| 中文字幕在线2019| 欧美在线观看视频一区二区| 中文字幕精品无码一区二区| 欧美日韩中文在线| 日韩一区二区视频在线| 精品久久在线播放| 国产黄色免费观看| 色综合久久久网| 天天爽夜夜爽人人爽| 欧美自拍偷拍午夜视频| 看黄色一级大片| 在线视频观看一区| 艳妇乳肉豪妇荡乳av无码福利 | 亚洲春色一区二区三区| 精品三级在线观看| 亚洲AV无码国产精品午夜字幕| 欧美一区二区国产| 午夜免费福利视频| 日韩欧美aaaaaa| 黄色片一区二区三区| 亚洲风情亚aⅴ在线发布| 午夜影院免费体验区| 亚洲免费电影在线观看| 成人77777| 久久人人爽人人爽爽久久| 91麻豆免费在线视频| 久久久免费在线观看| 一个人www视频在线免费观看| 日本国产欧美一区二区三区| 欧美日韩尤物久久| 91精品啪在线观看麻豆免费 | 亚洲精品福利在线观看| 精品三级久久久久久久电影聊斋| 一区二区三区在线播放欧美| 麻豆视频在线免费观看| 欧美激情女人20p| 在线观看欧美日韩电影| 国产欧美日韩免费| 亚洲一区二区三区日本久久九| 精品视频导航| 久久亚洲专区| 人人妻人人澡人人爽欧美一区| 日韩一级在线| 国产精品视频中文字幕| 国产电影一区二区三区| 给我免费观看片在线电影的| 欧美韩国日本一区| 免费在线观看黄视频| 色婷婷综合激情| 国产精品久久久国产盗摄| 亚洲国产免费av| 1024免费在线视频| 久久免费福利视频| 日韩第二十一页| 国产一区在线免费| 色综合咪咪久久网| 欧美日韩性生活片| 极品少妇xxxx偷拍精品少妇| 中文字幕一区二区人妻电影丶| 中国av一区二区三区| 精品无码m3u8在线观看| 欧美日韩一级视频| 五月天婷婷激情网| 成年人精品视频| 视频一区在线免费看| 国内一区在线| 欧美国产高潮xxxx1819| 激情五月婷婷久久| av电影天堂一区二区在线观看| 成人黄色短视频| 日韩欧美有码在线| 亚洲精品综合久久| 日韩在线视频国产| 456亚洲精品成人影院| 国产伦精品一区二区三区视频免费| 色乱码一区二区三区网站| 精品一区二区中文字幕| 国产成人亚洲精品狼色在线| 久久日免费视频| 欧美午夜激情在线| 国产综合在线播放| 色综合久久88| 日韩欧美激情| 亚洲国产精品视频一区| 亚洲在线观看| 亚洲av成人片无码| 亚洲综合在线视频| 精品人妻伦一二三区久久| 色悠悠久久久久| 51一区二区三区| 欧美午夜视频在线| 亚洲在线网站| 91玉足脚交白嫩脚丫| 亚洲韩国一区二区三区| 99在线精品视频免费观看软件| zzijzzij亚洲日本成熟少妇| 日本成人福利| 少妇特黄a一区二区三区| 久久经典综合| 欧美成人国产精品一区二区| 大伊人狠狠躁夜夜躁av一区| 亚洲av无码乱码国产精品久久| 超碰91人人草人人干| 免费一级欧美在线大片| 2021国产视频| 国产精品自拍av| 欧洲猛交xxxx乱大交3| 日韩三级视频在线看| 成人a在线视频免费观看| 91亚洲国产成人久久精品网站| 国产精品99久久久久久动医院| 鲁一鲁一鲁一鲁一av| 中文字幕中文在线不卡住| 亚洲图片在线播放| 久久久精品亚洲| 日本成人手机在线| 国产精品一色哟哟| 成人污视频在线观看| 国产区在线观看视频| 精品视频www| 影音成人av| 在线观看日本一区| 国产精品夜夜爽| 国产一级片免费观看| 亚洲精品美女久久 | 成人欧美一区二区三区黑人| 香蕉久久网站| 中文字幕天堂av| 日本精品一级二级| 日韩理伦片在线| 91久久国产综合久久蜜月精品| 在线观看一区| 免费看黄色av| 欧美一区2区视频在线观看| 国产乱妇乱子在线播视频播放网站| 黑人巨大精品欧美一区二区小视频| 免费亚洲一区| 特黄一区二区三区| 精品剧情在线观看| 二区三区不卡| 精品91一区二区三区| 成人精品免费看| av手机天堂网| 欧美精品在线第一页| 欧美网色网址| 日本高清一区二区视频| 亚洲一区二区三区视频在线 | 中文字幕在线观看第三页| 亚洲人成7777| 深夜福利免费在线观看| 成人乱色短篇合集| 国产欧美日韩综合一区在线播放 | 可以在线观看的黄色| 成人在线国产精品| 亚洲免费网址| 五月天婷婷色综合| 亚洲乱码一区av黑人高潮| 国产一区二区三区视频在线| av天堂永久资源网| 亚洲精品福利视频网站| 国产视频第一区| 国产v亚洲v天堂无码| 日本美女一区二区三区| 国产一级二级三级| 色偷偷av一区二区三区| 亚洲精品一级二级三级| 欧美人与性动交α欧美精品| 在线视频国内一区二区| 麻豆成全视频免费观看在线看|