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è)很簡單,由于 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í)間。它們提供了簡單的本地日期或時(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)文章
idea?maven?經(jīng)常主目錄自動(dòng)變回默認(rèn)的解決方法
很多朋友反映idea?maven?經(jīng)常主目錄自動(dòng)變回默認(rèn),遇到這樣的問題真的很頭疼,該如何解決呢?下面小編給大家介紹下idea?maven目錄變回默認(rèn)的解決方法,需要的朋友可以參考下2022-08-08
Java中判斷對(duì)象是否相等的equals()方法使用教程
與==運(yùn)算符響應(yīng),equals()方法也是Java中對(duì)對(duì)象進(jìn)行比較的一大方式,要特別注意二者的不同點(diǎn),這個(gè)我們?cè)谙挛闹屑磳⒅v到,接下來我們就來看一下Java中判斷對(duì)象是否相等的equals()方法使用教程2016-05-05
Struts2學(xué)習(xí)筆記(2)-路徑問題解決
本文主要介紹Struts2的路徑問題,盡量不要使用相對(duì)路徑,使用相對(duì)路徑會(huì)讓路徑問題變得很繁瑣很麻煩,推薦使用絕對(duì)路徑,希望能給大家做一個(gè)參考。2016-06-06
Springmvc工程跳轉(zhuǎn)controller無效的解決
這篇文章主要介紹了Springmvc工程跳轉(zhuǎn)controller無效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Mybatis之動(dòng)態(tài)sql標(biāo)簽的使用
這篇文章主要介紹了Mybatis之動(dòng)態(tài)sql標(biāo)簽的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06

