Java日期相關API的基本操作總結
前言
想大概總結一下日期相關API操作原因是對于日期的操作我們開發(fā)中還是很常見的,包括在數(shù)據(jù)庫中保存日期,包括之前String類中對字符串的一些處理開發(fā)中都很常見,但大多和javascript以及python中的相關API一致我就沒總結,對于日期這塊今天還是大概總結一下吧!
JDK8之前
Date對象的使用
對于這個對象,現(xiàn)在他的許多方法已經(jīng)過時了,我們只需要記住他的兩個構造器以及兩個方法的使用就行!
那么接下來在案例中看看這兩個構造器的使用以及兩個方法的使用:
public class Demo {
public static void main(String[] args) {
Date date1 = new Date();//構造器一 :創(chuàng)建一個對應當前日期的對象
System.out.println(date1.toString()); //方法一:輸出當前日期
System.out.println(date1.getTime()); //方法二:輸出當前日期對應的時間戳
Date date2 = new Date(1668749175853L); //構造器二:創(chuàng)建指定毫秒數(shù)的Date對象
System.out.println(date2);
}
}

但其實這里的Date有兩個,這個需要我們注意:
一個是java.util.Date,另一個是他的子類java.sql.Date。第二個很明顯是和我們的數(shù)據(jù)庫有關的,數(shù)據(jù)庫中保存日期則需要轉換為java.sql.Date類型!
因此,java.util.Date和子類java.sql.Date之間的轉換我們也要了解一下!
java.sql.Date 轉換為 java.util.Date
這個很簡單,由于 java.sql.Date是java.util.Date的子類,因此java.sql.Date轉換為java.util.Date只需要進行對象的上轉型操作:
java.util.Date date3 = new java.sql.Date(1668749175853L); System.out.println(date3);
當然也是可以像下面的用getTime()方法轉換成時間戳,然后用構造器最后完成轉換!
java.util.Date 轉換為 java.sql.Date
方式一:和多態(tài)有關,還是有局限性!
java.util.Date date3 = new java.sql.Date(1668749175853L); //上轉型 java.sql.Date data4 = (java.sql.Date)date3; //下轉型
方式二:我們常用的
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(); //使用默認的構造器
//格式化:日期 -》字符串
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);
}
}

這個是默認的格式化!
下面寫我們常用的格式化:
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大多說構造器已經(jīng)過時了,因為哪些構造器使用時有偏移量,需要注意。
JDK 1.0中包含了一個 java.util.Date 類,但是它的大多數(shù)方法已經(jīng)在 JDK 1.1引入 Calendar 類之后被棄用了。而 Calendar 并不比 Date 好多少。它們面臨的問題是:
- 可變性:像日期和時間這樣的類應該是不可變的。
- 偏移性:Date 中的年份是從1900開始的,而月份都從0開始。
- 格式化只對 Date 有用, Calendar 則不行。
- 此外,它們也不是線程安全的;不能處理閏秒等。
LocalDate 、LocalTime 、LocalDateTime的使用
LocalDate 、LocalTime 、LocalDateTime類是其中較重要的幾個類,它們的實例是不可變的對象,分別表示使用 ISO -8601日歷系統(tǒng)的日期、時間、日期和時間。它們提供了簡單的本地日期或時間,并不包含當前的時間信息,也不包含與時區(qū)相關的信息。下面通過小案例大概看看:
package 日期;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class Demo2 {
public static void main(String[] args) {
//now() 獲取當前的日期,時間,時間+日期
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() 設置指定的年月日時分秒,沒有偏移量
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() 設置改變一些時間的值,能體現(xiàn)不可變性,方法返回值是改變后的
LocalDateTime localDateTime3 = LocalDateTime.now();
LocalDateTime localDateTime4 = localDateTime3.withHour(5);
System.out.println(localDateTime3);
System.out.println(localDateTime4);
}
}

格式化日期 DateTimeFormatter 類的使用
關于這個類,我只寫一下自定義格式化日期,這一點和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);

結語
當然,jdk8之前還有一個Calendar日歷類的使用,感興趣的可以去看看!
到此這篇關于Java日期相關API的基本操作總結的文章就介紹到這了,更多相關Java日期API內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
idea?maven?經(jīng)常主目錄自動變回默認的解決方法
很多朋友反映idea?maven?經(jīng)常主目錄自動變回默認,遇到這樣的問題真的很頭疼,該如何解決呢?下面小編給大家介紹下idea?maven目錄變回默認的解決方法,需要的朋友可以參考下2022-08-08

