Java日期相關(guān)API的基本操作總結(jié)
前言
想大概總結(jié)一下日期相關(guān)API操作原因是對于日期的操作我們開發(fā)中還是很常見的,包括在數(shù)據(jù)庫中保存日期,包括之前String類中對字符串的一些處理開發(fā)中都很常見,但大多和javascript以及python中的相關(guān)API一致我就沒總結(jié),對于日期這塊今天還是大概總結(jié)一下吧!
JDK8之前
Date對象的使用
對于這個對象,現(xiàn)在他的許多方法已經(jīng)過時了,我們只需要記住他的兩個構(gòu)造器以及兩個方法的使用就行!
那么接下來在案例中看看這兩個構(gòu)造器的使用以及兩個方法的使用:
public class Demo { public static void main(String[] args) { Date date1 = new Date();//構(gòu)造器一 :創(chuàng)建一個對應(yīng)當(dāng)前日期的對象 System.out.println(date1.toString()); //方法一:輸出當(dāng)前日期 System.out.println(date1.getTime()); //方法二:輸出當(dāng)前日期對應(yīng)的時間戳 Date date2 = new Date(1668749175853L); //構(gòu)造器二:創(chuàng)建指定毫秒數(shù)的Date對象 System.out.println(date2); } }
但其實這里的Date有兩個,這個需要我們注意:
一個是java.util.Date,另一個是他的子類java.sql.Date。第二個很明顯是和我們的數(shù)據(jù)庫有關(guān)的,數(shù)據(jù)庫中保存日期則需要轉(zhuǎn)換為java.sql.Date類型!
因此,java.util.Date和子類java.sql.Date之間的轉(zhuǎn)換我們也要了解一下!
java.sql.Date 轉(zhuǎn)換為 java.util.Date
這個很簡單,由于 java.sql.Date是java.util.Date的子類,因此java.sql.Date轉(zhuǎn)換為java.util.Date只需要進(jìn)行對象的上轉(zhuǎn)型操作:
java.util.Date date3 = new java.sql.Date(1668749175853L); System.out.println(date3);
當(dāng)然也是可以像下面的用getTime()方法轉(zhuǎn)換成時間戳,然后用構(gòu)造器最后完成轉(zhuǎn)換!
java.util.Date 轉(zhuǎn)換為 java.sql.Date
方式一:和多態(tài)有關(guān),還是有局限性!
java.util.Date date3 = new java.sql.Date(1668749175853L); //上轉(zhuǎn)型 java.sql.Date data4 = (java.sql.Date)date3; //下轉(zhuǎn)型
方式二:我們常用的
Date date5 = new Date(); java.sql.Date date6 = new java.sql.Date(date5.getTime()); System.out.println(date6);//只會輸出年月日
需要注意的是java.sql.Date只會輸出年月日
格式化日期SimpleDateFormat類的使用
上面Date類的輸出格式不夠國際化看,對于我們來說看著不順,因此,還需要格式化成我們需要的格式。
package 日期; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat(); //使用默認(rèn)的構(gòu)造器 //格式化:日期 -》字符串 Date date = new Date(); String str = sdf.format(date); System.out.println(str); //解析:字符串 —》日期 String str2 = "2022/11/18 下午2:30"; Date date2 = null; try { date2 = sdf.parse(str2); } catch (ParseException e) { e.printStackTrace(); } System.out.println(date2); } }
這個是默認(rèn)的格式化!
下面寫我們常用的格式化:
package 日期; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); //格式化:日期 -》字符串 Date date = new Date(); String str = sdf.format(date); System.out.println(str); //解析:字符串 —》日期 String str2 = "2022-11-18 02:37:06"; Date date2 = null; try { date2 = sdf.parse(str2); } catch (ParseException e) { e.printStackTrace(); } System.out.println(date2); } }
JDK8之后
之前說過,jdk8之前的Date大多說構(gòu)造器已經(jīng)過時了,因為哪些構(gòu)造器使用時有偏移量,需要注意。
JDK 1.0中包含了一個 java.util.Date 類,但是它的大多數(shù)方法已經(jīng)在 JDK 1.1引入 Calendar 類之后被棄用了。而 Calendar 并不比 Date 好多少。它們面臨的問題是:
- 可變性:像日期和時間這樣的類應(yīng)該是不可變的。
- 偏移性:Date 中的年份是從1900開始的,而月份都從0開始。
- 格式化只對 Date 有用, Calendar 則不行。
- 此外,它們也不是線程安全的;不能處理閏秒等。
LocalDate 、LocalTime 、LocalDateTime的使用
LocalDate 、LocalTime 、LocalDateTime類是其中較重要的幾個類,它們的實例是不可變的對象,分別表示使用 ISO -8601日歷系統(tǒng)的日期、時間、日期和時間。它們提供了簡單的本地日期或時間,并不包含當(dāng)前的時間信息,也不包含與時區(qū)相關(guān)的信息。下面通過小案例大概看看:
package 日期; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; public class Demo2 { public static void main(String[] args) { //now() 獲取當(dāng)前的日期,時間,時間+日期 LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); System.out.println(localDate); System.out.println(localTime); System.out.println(localDateTime); System.out.println("---------------------"); //of() 設(shè)置指定的年月日時分秒,沒有偏移量 LocalDateTime localDateTime1 = LocalDateTime.of(2022,10,1,12,12,43); System.out.println(localDateTime1); System.out.println("---------------------"); //getXxx() 獲取指定的年 月 周等等 LocalDateTime localDateTime2 = LocalDateTime.now(); System.out.println(localDateTime2.getMonth()); System.out.println(localDateTime2.getHour()); System.out.println("---------------------"); //withXxx() 設(shè)置改變一些時間的值,能體現(xiàn)不可變性,方法返回值是改變后的 LocalDateTime localDateTime3 = LocalDateTime.now(); LocalDateTime localDateTime4 = localDateTime3.withHour(5); System.out.println(localDateTime3); System.out.println(localDateTime4); } }
格式化日期 DateTimeFormatter 類的使用
關(guān)于這個類,我只寫一下自定義格式化日期,這一點和SimpleDateFormat類的使用沒啥區(qū)別:
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); //格式化: String str = dateTimeFormatter.format(LocalDateTime.now()); System.out.println(str); //解析 TemporalAccessor parse = dateTimeFormatter.parse("2022-10-01 12:12:43"); System.out.println(parse);
結(jié)語
當(dāng)然,jdk8之前還有一個Calendar日歷類的使用,感興趣的可以去看看!
到此這篇關(guān)于Java日期相關(guān)API的基本操作總結(jié)的文章就介紹到這了,更多相關(guān)Java日期API內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatis-plus如何提前獲取實體類用雪花算法生成的ID
本文主要介紹了Mybatis-plus如何提前獲取實體類用雪花算法生成的ID,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07深入剖析java中String、StringBuffer、StringBuilder的區(qū)別
下面小編就為大家?guī)硪黄钊肫饰鰆ava中String、StringBuffer、StringBuilder的區(qū)別。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05Spring Data JPA開啟批量更新時樂觀鎖失效問題的解決方法
樂觀鎖的基本思想是,認(rèn)為在大多數(shù)情況下,數(shù)據(jù)訪問不會導(dǎo)致沖突,因此,樂觀鎖允許多個事務(wù)同時讀取和修改相同的數(shù)據(jù),而不進(jìn)行顯式的鎖定,本文給大家介紹了Spring Data JPA開啟批量更新時樂觀鎖失效問題的解決方法,需要的朋友可以參考下2024-07-07