使用LocalDate,LocalTime和LocalDateTime
Java 8對日期和時間API進行了重大更改,這是在JSR 310:日期和時間API的 JDK中包括了Joda Time API 。 此JSR由Joda Time的創建者Stephen Colebourne領導。
有許多驚人的API可用于日期和時間。 在本文中,我將介紹最常用的: java.time.LocalDate , java.time.LocalTime和java.time.LocalDateTime 。 這些代表獨立于時區的日期和時間值。 因此,它們依靠系統時鐘來捕獲值。
創建一個實例
讓我們來看看使用創建它們的實例的方式now()方法和工廠方法of()
jshell> LocalDate.now() $46 ==> 2018-07-07jshell> LocalDate.of(2018, 3, 30) $47 ==> 2018-03-30jshell> LocalTime.now() $48 ==> 00:32:06.883656jshell> LocalTime.of(12,43,12,33333); $49 ==> 12:43:12.000033333jshell> LocalDateTime.now() $50 ==> 2018-07-07T00:32:30.335562400jshell> LocalDateTime.of(2018, 12, 30, 12,33) $51 ==> 2018-12-30T12:33jshell> LocalDateTime.of(LocalDate.now(), LocalTime.now()) $52 ==> 2018-07-07T00:40:38.198318200處理日期和時間
讓我們看一下如何操作或修改創建的日期和時間實例:
jshell> LocalDate d = LocalDate.now() d ==> 2018-07-07jshell> d.plusDays(12) $54 ==> 2018-07-19jshell> d d ==> 2018-07-07jshell> d.plusMonths(2) $56 ==> 2018-09-07jshell> d.minusDays(5) $57 ==> 2018-07-02jshell> d.minusWeeks(4) $58 ==> 2018-06-09這些plus*()和minus*()方法是不可變的,并返回一個新的日期和時間實例。 在上面的示例中,我們看到了幾種方法來操縱java.time.LocalDate的組件。 在類似的行上,有plus*()和minus*()方法用于處理java.time.LocalTime和java.time.LocalDateTime的組件。
比較日期和時間實例
我們想知道給定的日期和時間是在另一個日期之前還是之后,在這種情況下,我們將使用isBefore()和isAfter()方法,如下所示:
jshell> var d1 = LocalDate.of(2018, 7, 6) d1 ==> 2018-07-06jshell> var d2 = LocalDate.of(2018, 7, 7) d2 ==> 2018-07-07jshell> d1.isAfter(d2) $64 ==> falsejshell> d1.isBefore(d2) $65 ==> truejshell> var dt1 = LocalDateTime.of(2018, 7, 7, 12, 30) dt1 ==> 2018-07-07T12:30jshell> var dt2 = LocalDateTime.of(2018, 7, 7, 14, 30) dt2 ==> 2018-07-07T14:30jshell> dt1.isBefore(dt2) $68 ==> truejshell> dt1.isAfter(dt2) $69 ==> false在字符串和日期對象表示之間轉換
通常,我們需要將日期和時間的String表示形式轉換為其相應的對象,并且還將該對象轉換為String表示形式。 對于較舊的日期類java.util.Date我們使用java.text.SimpleDateFormat解析字符串為日期,反之亦然。 在新的日期時間API中,為同一任務引入了新類java.time.format.DateTimeFormatter 。
如果遵循在字符串和對象表示形式之間轉換日期的ISO標準,由于java.time.format.DateTimeFormatter提供了預定義的ISO格式,因此圖層和應用程序之間的許多集成將變得無縫。 讓我們看一下實際情況:
jshell> import java.time.*jshell> LocalDateTime ldt = LocalDateTime.now() ldt ==> 2018-09-26T22:58:32.229096300jshell> import java.time.format.*jshell> ldt.format(DateTimeFormatter.ISO_DATE) $4 ==> "2018-09-26"jshell> ldt.format(DateTimeFormatter.ISO_DATE_TIME) $5 ==> "2018-09-26T22:58:32.2290963"jshell> ldt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME) $9 ==> "2018-09-26T22:58:32.2290963"jshell> ldt.format(DateTimeFormatter.BASIC_ISO_DATE) $10 ==> "20180926"我們甚至可以使用自定義格式設置模式,如下所示:
jshell> ldt.format(DateTimeFormatter.ofPattern("d-M-y")); $11 ==> "26-9-2018"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MM-y hh:mm:ss")); $12 ==> "26-09-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d/MMM/y hh:mm:ss")); $13 ==> "26/Sep/2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y hh:mm:ss")); $14 ==> "26-Sep-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y hh:mm:ss")); $15 ==> "26-Sep-2018 10:58:32"jshell> ldt.format(DateTimeFormatter.ofPattern("d-MMM-y HH:mm:ss")); $16 ==> "26-Sep-2018 22:58:32"可以在Javadoc中的java.time.format.DateTimeFormatter找到用于創建模式的不同規則。
讓我們看一下將日期和時間的有效String表示形式轉換為LocalDateTime及其相關對象:
<br />jshell> LocalDate ld = LocalDate.parse("2018-09-26") ld ==> 2018-09-26jshell> LocalDateTime ldt = LocalDateTime.parse("2018-09-26T22:24:33") ldt ==> 2018-09-26T22:24:33您可以看到,在上面的代碼中,我們沒有提供用于解析字符串的模式,而是使用了默認的ISO格式。 通過API交換日期和時間值時,此方法非常有用。
這樣,我展示了一些基本的操作,您可以使用與時區無關的新日期和時間實例進行操作。 在接下來的文章中,我將寫有關時區的時間,查找持續時間,時間和日期之間的時間段以及如何使用不同的日歷系統。
翻譯自: https://www.javacodegeeks.com/2018/10/localdate-localtime-localdatetime.html
總結
以上是生活随笔為你收集整理的使用LocalDate,LocalTime和LocalDateTime的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JEP 181不兼容,嵌套类/ 2
- 下一篇: 科乐美音游《超疯狂节奏城堡》11 月 1