Java日期相關(guān)API的基本操作總結(jié)
前言
想大概總結(jié)一下日期相關(guān)API操作原因是對(duì)于日期的操作我們開發(fā)中還是很常見的,包括在數(shù)據(jù)庫中保存日期,包括之前String類中對(duì)字符串的一些處理開發(fā)中都很常見,但大多和javascript以及python中的相關(guān)API一致我就沒總結(jié),對(duì)于日期這塊今天還是大概總結(jié)一下吧!
JDK8之前
Date對(duì)象的使用
對(duì)于這個(gè)對(duì)象,現(xiàn)在他的許多方法已經(jīng)過時(shí)了,我們只需要記住他的兩個(gè)構(gòu)造器以及兩個(gè)方法的使用就行!
那么接下來在案例中看看這兩個(gè)構(gòu)造器的使用以及兩個(gè)方法的使用:
public class Demo { public static void main(String[] args) { Date date1 = new Date();//構(gòu)造器一 :創(chuàng)建一個(gè)對(duì)應(yīng)當(dāng)前日期的對(duì)象 System.out.println(date1.toString()); //方法一:輸出當(dāng)前日期 System.out.println(date1.getTime()); //方法二:輸出當(dāng)前日期對(duì)應(yīng)的時(shí)間戳 Date date2 = new Date(1668749175853L); //構(gòu)造器二:創(chuàng)建指定毫秒數(shù)的Date對(duì)象 System.out.println(date2); } }
但其實(shí)這里的Date有兩個(gè),這個(gè)需要我們注意:
一個(gè)是java.util.Date,另一個(gè)是他的子類java.sql.Date。第二個(gè)很明顯是和我們的數(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
這個(gè)很簡(jiǎn)單,由于 java.sql.Date是java.util.Date的子類,因此java.sql.Date轉(zhuǎn)換為java.util.Date只需要進(jìn)行對(duì)象的上轉(zhuǎn)型操作:
java.util.Date date3 = new java.sql.Date(1668749175853L); System.out.println(date3);
當(dāng)然也是可以像下面的用getTime()方法轉(zhuǎn)換成時(shí)間戳,然后用構(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);//只會(huì)輸出年月日
需要注意的是java.sql.Date只會(huì)輸出年月日
格式化日期SimpleDateFormat類的使用
上面Date類的輸出格式不夠國際化看,對(duì)于我們來說看著不順,因此,還需要格式化成我們需要的格式。
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); } }
這個(gè)是默認(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)過時(shí)了,因?yàn)槟男?gòu)造器使用時(shí)有偏移量,需要注意。
JDK 1.0中包含了一個(gè) java.util.Date 類,但是它的大多數(shù)方法已經(jīng)在 JDK 1.1引入 Calendar 類之后被棄用了。而 Calendar 并不比 Date 好多少。它們面臨的問題是:
- 可變性:像日期和時(shí)間這樣的類應(yīng)該是不可變的。
- 偏移性:Date 中的年份是從1900開始的,而月份都從0開始。
- 格式化只對(duì) Date 有用, Calendar 則不行。
- 此外,它們也不是線程安全的;不能處理閏秒等。
LocalDate 、LocalTime 、LocalDateTime的使用
LocalDate 、LocalTime 、LocalDateTime類是其中較重要的幾個(gè)類,它們的實(shí)例是不可變的對(duì)象,分別表示使用 ISO -8601日歷系統(tǒng)的日期、時(shí)間、日期和時(shí)間。它們提供了簡(jiǎn)單的本地日期或時(shí)間,并不包含當(dāng)前的時(shí)間信息,也不包含與時(shí)區(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)前的日期,時(shí)間,時(shí)間+日期 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è)置指定的年月日時(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è)置改變一些時(shí)間的值,能體現(xiàn)不可變性,方法返回值是改變后的 LocalDateTime localDateTime3 = LocalDateTime.now(); LocalDateTime localDateTime4 = localDateTime3.withHour(5); System.out.println(localDateTime3); System.out.println(localDateTime4); } }
格式化日期 DateTimeFormatter 類的使用
關(guān)于這個(gè)類,我只寫一下自定義格式化日期,這一點(diǎ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之前還有一個(gè)Calendar日歷類的使用,感興趣的可以去看看!
到此這篇關(guān)于Java日期相關(guān)API的基本操作總結(jié)的文章就介紹到這了,更多相關(guān)Java日期API內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C#日期格式字符串的相互轉(zhuǎn)換操作實(shí)例分析
- C#日期格式強(qiáng)制轉(zhuǎn)換方法(推薦)
- C#日期控件datetimepicker保存空值的三種方法
- C#日期格式化的幾個(gè)要點(diǎn)小結(jié)
- java實(shí)現(xiàn)在原有日期時(shí)間上加幾個(gè)月或幾天
- Java檢查日期字符串是否合法的方法總結(jié)
- Java?Date(日期)對(duì)象進(jìn)行格式化的思路詳解
- java日期時(shí)間格式化@JsonFormat與@DateTimeFormat的使用
- Java如何利用LocalDate獲取某個(gè)月的第一天與最后一天日期
- 如何將Java與C#時(shí)間進(jìn)行互相轉(zhuǎn)換
相關(guān)文章
Mybatis-plus如何提前獲取實(shí)體類用雪花算法生成的ID
本文主要介紹了Mybatis-plus如何提前獲取實(shí)體類用雪花算法生成的ID,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07深入剖析java中String、StringBuffer、StringBuilder的區(qū)別
下面小編就為大家?guī)硪黄钊肫饰鰆ava中String、StringBuffer、StringBuilder的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05Spring Data JPA開啟批量更新時(shí)樂觀鎖失效問題的解決方法
樂觀鎖的基本思想是,認(rèn)為在大多數(shù)情況下,數(shù)據(jù)訪問不會(huì)導(dǎo)致沖突,因此,樂觀鎖允許多個(gè)事務(wù)同時(shí)讀取和修改相同的數(shù)據(jù),而不進(jìn)行顯式的鎖定,本文給大家介紹了Spring Data JPA開啟批量更新時(shí)樂觀鎖失效問題的解決方法,需要的朋友可以參考下2024-07-07