前言
Java 8 提供了一套新的時間 api ,比之前的 Calendar 類要簡單明了很多。常用的有三個類 Instant、LocalDate 、LocalDateTime , Instant 是用來表示時刻的,類似 Unix 的時間,表示從協(xié)調世界時1970年1月1日0時0分0秒起至現(xiàn)在的總秒數(shù),也可以獲取毫秒。LocalDate 表示一個日期,只有年月日,沒有時分秒。LocalDateTime 就是年月日時分秒了。
下面話不多說了,來一起看看詳細的介紹吧
Instant
public static void main(String[] args) {Instant now = Instant.now();System.out.println("Now secoonds:" + now.getEpochSecond());System.out.println("Now milli :" + now.toEpochMilli());}
輸出當前時刻距離 1970年1月1日0時0分0秒 的秒和毫秒
Now secoonds:1541321299
Now milli :1541321299037
LocalDateTime
為了方便輸出時間格式,Java8 提供了 DateTimeFormatter 類來替代之前的 SimpleDateFormat。
public static void main(String[] args) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime now = LocalDateTime.now();System.out.println("Now: " + now.format(formatter));}
Now: 2018-11-04 16:53:09
LocalDateTime 提供了很多時間計算的方法,比如 加一個小時,減去一周,加上一天等等這樣的計算,比之前的 Calendar 要方便許多。
public static void main(String[] args) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime now = LocalDateTime.now();System.out.println("Now: " + now.format(formatter));LocalDateTime nowPlusDay = now.plusDays(1);System.out.println("Now + 1 day: " + nowPlusDay.format(formatter));LocalDateTime nowMinusHours = now.minusHours(5);System.out.println("Now - 5 hours: " + nowMinusHours.format(formatter));}
Now: 2018-11-04 17:02:53
Now + 1 day: 2018-11-05 17:02:53
Now - 5 hours: 2018-11-04 12:02:53
LocalDateTime 還有 isAfter 、 isBefore 和 isEqual 方法可以用來比較兩個時間。LocalDate 的用法和 LocalDateTime 是類似的。
Instant 和 LocalDateTime 的互相轉換
這倆的互相轉換都要涉及到一個時區(qū)的問題。LocalDateTime 用的是系統(tǒng)默認時區(qū)。我們可以先把 LocalDateTime 轉為 ZonedDateTime ,然后再轉成 Instant。
public static void main(String[] args) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");LocalDateTime now = LocalDateTime.now();System.out.println("Now: " + now.format(formatter));Instant nowInstant = now.atZone(ZoneId.systemDefault()).toInstant();System.out.println("Now mini seconds: " + nowInstant.toEpochMilli());}
Now: 2018-11-04 17:19:16
Now mini seconds: 1541323156101
public static void main(String[] args) {DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");Instant now = Instant.now();System.out.println("Now mini seconds: " + now.toEpochMilli());LocalDateTime nowDateTime = LocalDateTime.ofInstant(now, ZoneId.systemDefault());System.out.println("Zone id: " + ZoneId.systemDefault().toString());System.out.println("Now: " + nowDateTime.format(formatter));}
Now mini seconds: 1541323844781
Zone id: Asia/Shanghai
Now: 2018-11-04 17:30:44
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。
新聞熱點
疑難解答
圖片精選