俠說java8-LocalDateTime等時間使用手冊(全),先mark後看

2020-12-11 俠夢說

前言

java8的時間日期api給我們提供了極大的便利。如何更好的熟悉使用時間api也是學習java8的一個很重要的知識點,下面我們一起來學習學習。

本篇文章代碼比較多,可以作為工具,需要使用時,再來查閱。

目錄

1.普通Date時間如何轉為LocalDateTime?

以上是從普通的Date對象轉換成java8時間的操作步驟,需要特別注意下時區的問題。

// 設置時區// ZoneId defaultZoneId = ZoneId.systemDefault(); ZoneId defaultZoneId = ZoneId.of("Asia/Shanghai"); System.out.println("set TimeZone : " + defaultZoneId); //以下每個注釋為輸出的結果 //date : Fri Jan 17 16:52:59 CST 2020 Date date = new Date(); System.out.println("date : " + date); //1. instant : 2020-01-17T08:52:59.235Z Instant instant = date.toInstant(); System.out.println("instant : " + instant); //Zone : 默認是UTC+0時區 //2. localDate : 2020-01-17 LocalDate localDate = instant.atZone(defaultZoneId).toLocalDate(); System.out.println("localDate : " + localDate); //3. LocalDateTime: 2020-01-17T16:52:59.235 LocalDateTime localDateTime = instant.atZone(defaultZoneId).toLocalDateTime(); System.out.println("localDateTime : " + localDateTime); //4. ZonedDateTime: 2020-01-17T16:52:59.235+08:00[Asia/Shanghai] ZonedDateTime zonedDateTime = instant.atZone(defaultZoneId); System.out.println("zonedDateTime : " + zonedDateTime);

2. java8時間如何轉換為普通Date?

轉換的過程和上面圖例剛好反過來,代碼如下:

//同樣,我們設置時區為上海 ZoneId defaultZoneId = ZoneId.of("Asia/Shanghai"); System.out.println(" Default TimeZone : " + defaultZoneId); LocalDate localDate = LocalDate.of(2020, 01, 17); Date date = Date.from(localDate.atStartOfDay(defaultZoneId).toInstant()); System.out.println("\n1. LocalDate -> Date"); System.out.println("localDate : " + localDate); System.out.println("date : " + date); LocalDateTime localDateTime = LocalDateTime.of(2020,01,17,17,46,31); Date date2 = Date.from(localDateTime.atZone(defaultZoneId).toInstant()); System.out.println("\n2. LocalDateTime -> Date"); System.out.println("localDateTime : " + localDateTime); System.out.println("date2 : " + date2); ZonedDateTime zonedDateTime = localDateTime.atZone(defaultZoneId); Date date3 = Date.from(zonedDateTime.toInstant()); System.out.println("\n3. ZonedDateTime -> Date"); System.out.println("zonedDateTime : " + zonedDateTime); System.out.println("date3 : " + date3);

3.如何比較時間?

無論是Date,還是java8中的localDate和localDateTime都可以通過compareTo方法來比較時間。SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date date1 = sdf.parse("2020-01-17");Date date2 = sdf.parse("2020-01-16");System.out.println("前者如果較大則為正,相等為0,小於為負 : " + date1.compareTo(date2));LocalDate 和LocalDateTime提供了3個方法,isAfter(),isBefore(),isEqual()。

而在java8之前,我們是使用 after(), before(),equals。方法名有所區別,但是功能大同小異。

4.java8中的瞬點Instant

Instant代表一個瞬時的時間點值對象。

它從1970-01-01T00:00:00Z點毫秒計算的,是不可變的,並且是線程安全的。

5.獲取當前時間戳方式?

方式一:new Timestamp(System.currentTimeMillis());

方式二:new Date().getTime();

方式三:Instant。

方式四:Calendar.getInstance()

方式五:LocalDateTime.now()

方式六:LocalDate.now()

Timestamp timestamp = new Timestamp(System.currentTimeMillis());//2020-01-17 17:04:53.346System.out.println(timestamp);//return 1579251953703System.out.println(timestamp.getTime());// 時間戳轉換為 instant 2020-01-17T09:05:53.703ZInstant instant = timestamp.toInstant();System.out.println(instant);//return 1579251953703System.out.println(instant.toEpochMilli());// instant to timestamp 1579251893346Timestamp tsFromInstant = Timestamp.from(instant);System.out.println(tsFromInstant.getTime());

6.時間轉String

時間和字符串的轉換,相信大家都知道一般使用SimpleDateFormat來實現,但是這個api使用不當可能會有線程安全問題,這裡推薦使用如下的方式來做轉換,保證thread-safe。

//使用當前時間測試LocalDateTime now = LocalDateTime.now();System.out.println("Before : " + now);DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");String formatDateTime = now.format(formatter);System.out.println("After : " + formatDateTime);

7.String轉時間

String now = "2020-01-17 17:30";DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");LocalDateTime formatDateTime = LocalDateTime.parse(now, formatter);System.out.println("Before : " + now);System.out.println("After : " + formatDateTime);System.out.println("After : " + formatDateTime.format(formatter));

8.Instant 轉LocalDateTime

Instant instant = Instant.now();System.out.println("Instant : " + instant);// 添加時區為上海LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneId.of("Asia/Shanghai"));System.out.println("LocalDateTime : " + ldt);

9.LocalDateTime轉Instant

LocalDateTime dateTime = LocalDateTime.of(2020, 01, 17, 6, 17, 10);//LocalDateTime : 2020-01-17T06:17:10System.out.println("LocalDateTime : " + dateTime);// +hh:mm 如果設置時區為東八區,則要比原來時間晚8小時//Instant : 2020-01-16T22:17:10ZInstant instant = dateTime.toInstant(ZoneOffset.of("+08:00"));System.out.println("Instant : " + instant);

10.java8為什麼出現localDate和localDateTime?

在java8以前,時間是通過Date類等來表示,其中包含了一些比較差的API設計。例如,年份java.util.Date從1900開始,月份從1開始,天從0開始,這很不直觀。第三方日期和時間庫對此進行了一些彌補的流行,例如Joda-Time。

為了解決這些問題並在JDK內核中提供更好的支持,針對Java SE 8設計了一個新的並且沒有這些問題的日期和時間API。

Java SE 8附帶新的日期和時間API,java.time該API 為開發人員提供了大大改善的安全性和功能。新的API很好地建模了領域,並提供了用於對各種開發人員用例進行建模的大量類。

為了方便大家學習討論,我創建了一個java疑難攻堅互助大家庭,和其他傳統的學習交流不同。本群主要致力於解決項目中的疑難問題,在遇到項目難以解決的

問題時,都可以在這個大家庭裡尋求幫助。

公眾號關注 : 【俠夢的開發筆記】後回復【問題的答案】進入:java中Integer包裝類的基本數據類型是?

如果你也經歷過遇到項目難題,無從下手,

他人有可能可以給你提供一些思路和看法,一百個人就有一百種思路,

同樣,如果你也樂於幫助別人,那解決別人遇到的問題,也同樣對你是一種鍛鍊。

自學路上你不孤單,歡迎來公眾號【俠夢的開發筆記】,回復乾貨,為你準備了精選的學習視頻

相關焦點

  • python 時間模塊 time datetime calendar複習與比較
    即自1970-01-01開始的格林威治標準時間這裡需要解釋兩點1.why 1970-01-01?這個時間是以UNIX誕生時間,unix認為1970年1月1日0點是時間紀元,其他程式語言的時間戳也是這麼使用的格林威治時間即為0時區時間,中學地理肯定學過本初子午線吧,哈哈....
  • Python基礎模塊:日期與時間模塊@time+datetime
    ## 將時間戳轉化為本地時區struct_time對象time.localtime(now)time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=20, tm_min=35, tm_sec=59, tm_wday=0, tm_yday=39,
  • java8下的我們應該這樣用時間
    Java8新特性java.time.*包學習。 自從java發布模式變更就發現自己有些跟不上他們的速度,java8還有不少沒有用透而9、10、11相繼出來,長江後浪推前浪一浪勝過一浪。之前date的使用還不敢自信說多透徹,後續都是淚...(歡迎醬油...)
  • python基礎系列|示例講解時間模塊datetime
    Python 有很多種方式處理日期和時間,常見的時間處理的模塊是datetime、time、calendar。能融匯貫通的了解和使用這三個模塊,才能輕而易舉地用python處理時間。本文以此為目的,通過講述各個時間模塊的概述、函數及相關知識細節、以及相應的示例來講透它們的使用方式。
  • python中時間格式處理問題—— time和datetime庫函數應用!
    年、月、日, 就需要把多餘部分給去掉;Snipaste_2020-02-20_00-49-56.jpg1,概念了解這篇文章主要介紹一下 python 中 時間轉換問題(  用到的庫:time 和 datetime ),對於 time 來說,使用到的函數主要有四個:
  • python標準庫 datetime 日期的使用
    我們在工作過程中有時候會用到日期方面的計算,比如計算兩個日期之前的差,這需要用到python中的一個日期庫 date,今天我們就來認識一下這個庫的使用吧
  • Python 中的時間處理
    2.從time模塊說起為了學習time模塊,我們需要先知道幾個與時間相關的概念:2.1 epoch假設我們要將時間表示成毫秒數,比方說1000000毫秒,那有一個問題必須解決,這個1000000毫秒的起點是什麼時間,也就是我們的時間基準點是什麼時間?好比我說你身高1.8米,那這個身高是指相對於你站立的地面說的。
  • python中的時間處理
    但由於calendar模塊使用不多,限於篇幅,本文沒有涉及。datetime模塊主要是用來表示日期的,就是我們常說的年月日時分秒,calendar模塊主要是用來表示年月日,是星期幾之類的信息,time模塊主要側重點在時分秒,粗略從功能來看,我們可以認為三者是一個互補的關係,各自專注一塊。方便用戶依據不同的使用目的選用趁手的模塊。
  • Pandas 數據處理|Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date =
  • Pandas 數據處理 | Datetime 時間模塊在 Pandas 中的使用
    Datatime 作為 Python 中的時間模塊類型,處理時間有關數據是非常方便的, Pandas 作為數據分析程序包同樣也支持 DataTime 數據機制,例如1,函數 to_datetime() 將數據列表中的 Series 列轉化為 datetime 類型,#Convert the type to datetimeapple.Date
  • python中的時間處理大總結
    好比我說你身高1.8米,那這個身高是指相對於你站立的地面說的。這個時間基準點就是epoch,在Unix系統中,這個基準點就是1970年1月1日0點整那個時間點。2) GMT, UTC上面我們說epoch表示1970年的起始點,那這個1970年又是相對於哪個基準時間呢?
  • 13個知識點,系統整理Python時間處理模塊Datetime
    首先要介紹的,是大家平時用的較多的 datetime 模塊,它屬於 Python 的內置模塊,功能相對較全。datetime.datetime(2020, 10, 12, 20, 10, 1)通過 datetime 的實例化,是我們使用時間是經常用到的方法,在日常使用過程中,我們可能只需要具體到某天,或者只需要具體到某天的某個時間點,這時候,也可以通過 datetime 的一些方法來實現。
  • 深入Python中的time和datetime模塊
    time和datetime是Python處理日期和時間的標準庫。在我們項目的實際開發當中使用率是非常高的。datetime模塊有四個重要的類,date,time,datetime,以及timedelta類,分別表示的是日期對象、時間對象、日期時間對象和時間差對象。
  • LocalDateTime、OffsetDateTime、ZonedDateTime互轉,這一篇絕對餵飽你
    ❝說明:ISO-8601日系統是現今世界上絕大部分國家/地區使用的,這就是我們國人所說的公曆,有閏年的特性❞LocalDateTime是一個不可變的日期-時間對象,它表示一個日期時間,通常被視為年-月-日-小時-分鐘-秒。
  • Java基礎知識點面試手冊(線程+JDK8)
    睡眠不釋放鎖(如果有的話);wait 方法:是 Object 的方法,必須與 synchronized 關鍵字一起使用,線程進入阻塞狀態,當 notify 或者 notifyall 被調用後,會解除阻塞。但是,只有重新佔用互斥鎖之後才會進入可運行狀態。睡眠時,釋放互斥鎖。
  • 【Python基礎】13個知識點,系統整理Python時間處理模塊Datetime
    首先要介紹的,是大家平時用的較多的 datetime 模塊,它屬於 Python 的內置模塊,功能相對較全。datetime.datetime(2020, 10, 12, 20, 10, 1)通過 datetime 的實例化,是我們使用時間是經常用到的方法,在日常使用過程中,我們可能只需要具體到某天,或者只需要具體到某天的某個時間點,這時候,也可以通過 datetime 的一些方法來實現。
  • 二十六、深入Python中的time和datetime模塊
    datetime模塊有四個重要的類,date,time,datetime,以及timedelta類,分別表示的是日期對象、時間對象、日期時間對象和時間差對象。時間戳時間戳是指格林威治時間1970年01月01日00時00分00秒(北京時間1970年01月01日08時00分00秒)起至現在的總秒數。
  • Java基礎篇(04):日期與時間API用法詳解
    ,Date類一直在項目中使用,但是相關API的方法都已經基本廢棄,通常使用一些二次封裝的時間組件。但是Calendar依舊很少被使用,上述基礎API就已經是很好的說明了。3、JDK1.8升級APIJava8之後的版本中,核心API類包括LocalDate-日期、LocalTime-時間、LocalDateTime-日期加時間。LocalDate:日期描述是final修飾的不可變類,默認格式yyyy-MM-dd。
  • 使用Java8 Optional 的正確姿勢
    這就是我們將要講到的使用好 Java 8 Optional 類型的正確姿勢.在裡約奧運之時, 新聞一再提起五星紅旗有問題, 可是我怎麼看都看不出來有什麼問題, 後來才道是小星星膜拜中央的姿勢不對.因此我們千萬也別對自己習以為常的事情覺得理所當然, 絲毫不會覺得有何不妥, 換句話說也就是當我們切換到 Java 8 的 Optional 時, 不能繼承性的對待過往 null 時的那種思維, 應該掌握好新的, 正確的使用 Java 8 Optional 的正確姿勢.
  • python時間
    1612322294.6218581#time.localtime的參數默認是time.time()的時間戳,可以自己輸入某個時間戳來獲取其對應的時間:默認當前時間戳;指定某個時間戳print(time.localtime())#列印當前的時間,得到的結果是時間元組time.struct_time(tm_year=2021, tm_mon=2, tm_mday=3, tm_hour