日期格式處理
文章目錄
前言
時間是一個,我們生活中最常見也是最重要的東西,在不同的國家不同的地區時間的表現方式都不一樣,當然當你獲得一個時間,或則時間戳,你該怎麼讓這個時間符合中國人的審美觀呢,今天我們就來說一下時間的各種處理方法。
一、時間的長整數表示
時間的長整數表示,是Java中最常見的,需要加工才能出現,我們喜歡的,能看懂的時間格式。而在Java中是這樣表示的
程式碼如下(示例):
public class Test01 {
public static void main(String[] args) {
// 時間的長整數表示
System.out.println(System.currentTimeMillis());
}
程式碼如下(輸出):
1611390612099
輸出的1611390612099表示的是從1970-01-01 00:00:00:000開始到現在所經歷的毫秒數,而在計算機中為了方便儲存時以一個這樣的時間戳來儲存的,所以拿到這麼個時間戳,如果不經過處理,別說普通的沒接觸過程式碼的人看不懂,就連我們搞程式設計的第一次見到都發蒙,所以我們就得對它進行一定的處理,讓它為多數人接受。
二、日期類
類 | 作用 |
---|---|
java.util.Date | Java程式中通常用它表示日期 |
SimpleDateFormat | 實現日期和字串之間的轉換 |
Local | 表示特定的地理、政治、文化地區 |
Calendar(*)l | 日期類,封裝了年月日時分秒和時區 |
java.sql.Date | 主要在資料庫中操作日期,因為資料庫中不直接支援 java.util.Date |
由於我還沒學到資料庫,還有java.util.Date和Calendar(*)的使用方法基本相同,我們今天主要用的是前三個
二、java.util.Date、SimpleDateFormat、Local的主要用法
1.java.util.Date主要用法
程式碼如下(示例):
// 導包一定是import java.util.Date
import java.util.Date;
public class Test02 {
public static void main(String[] args) {
// 獲取時間的Date物件
Date date = new Date();
// 獲取當前時間距離1970-01-01 00:00:00:000的毫秒值表示形式
// 最常用的應該是int型別的,但是int型別的表示範圍不夠了,所以用比int強的long
long time = date.getTime();
System.out.println(time);
程式碼如下(輸出):
1611392755401
小結
java.util.Date主要是獲取獲取當前時間距離1970-01-01 00:00:00:000時間戳
2.SimpleDateFormat的主要用法
1.日期的預設格式國際標準表示
程式碼如下(示例):
import java.util.Date;
public class Test03 {
public static void main(String[] args) {
// 國際標準
Date date = new Date();
System.out.println(date);
}
}
程式碼如下(輸出):
Sat Jan 23 17:19:08 CST 2021
上面的輸出結果作為一箇中國人看著不太懂,作為一個英語欠佳的中國人看著更不懂,所以我們就得將這個東西格式化輸出,讓人一看就懂的東西。就得用SimpleDateFormat這個小幫手了。
2.Local主要作用
程式碼如下(示例):
import java.util.Locale;
public class Test01 {
public static void main(String[] args) {
// 獲取此虛擬機器例項當前預設語言環境值
Locale locale = Locale.getDefault();
System.out.println(locale);
}
}
程式碼如下(輸出):
zh_CN
輸出zh_CN的意思是中國中文,其實就是給SimpleDateFormat提供輔助,讓虛擬機器能識別輸出中文模式。
3.定製日期輸出格式
程式碼如下(例子):
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test03 {
public static void main(String[] args) {
Date date = new Date();
System.out.println("格式化前的日期為:"+date);
// 定製日期格式為yyyy-MM-dd HH:mm:ss
SimpleDateFormat simpleDateFormat01 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
String time01 = simpleDateFormat01.format(date);
System.out.println("格式化後的日期為:"+time01);
// 定製日期格式為yyyy年MM月dd日 HH:mm:ss
SimpleDateFormat simpleDateFormat02 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
String time02 = simpleDateFormat02.format(date);
System.out.println("格式化後的日期為:"+time02);
程式碼如下(輸出):
格式化前的日期為:Sat Jan 23 17:43:28 CST 2021
格式化後的日期為:2021-01-23 17:43:28
格式化後的日期為:2021年01月23日 17:43:28
小結
說大白話,其實java.util.Date,Local都是為SimpleDateFormat服務的,SimpleDateFormat有還幾個過載的函式,但是我選的是最常用的那個,此函式的需要兩個實參就是java.util.Date,Local提供的。
三、日期字串、日期、時間戳三者轉換(重要!!!!!)
1.日期字串轉換成日期物件
程式碼如下(例子):
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test04 {
public static void main(String[] args) throws ParseException {
String string = "2021年01月23日 17:43:28";
System.out.println("解析前的字串為:"+string);
SimpleDateFormat simpleDateFormat01 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
Date date = simpleDateFormat01.parse(string);
System.out.println("解析後的國際標準日期為:"+date);
}
}
程式碼如下(輸出):
解析前的字串為:2021年01月23日 17:43:28
解析後的國際標準日期為:Sat Jan 23 17:43:28 CST 2021
注意
時間字串的格式應與SimpleDateFormat中的pattern一致,否則會報Unparseable date: "2021年01月23日 17:43:28這個錯,匹配不上。
2.將時間戳轉換成字串
程式碼如下(例子):
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test05 {
public static void main(String[] args) {
Date date = new Date();
//獲取當前時間距離1970-01-01 00:00:00:000的毫秒值表示形式的時間戳
long timeStamp = date.getTime();
System.out.println("沒有經過轉換的時間戳為:"+timeStamp);
SimpleDateFormat simpleDateFormat01 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
String string = simpleDateFormat01.format(timeStamp);
System.out.println("經過轉換後的字串為:"+string);
}
程式碼如下(輸出):
沒有經過轉換的時間戳為:1611397627289
經過轉換後的字串為:2021年01月23日 18:27:07
3.將字串轉換成時間戳
程式碼如下(例子):
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class Test06 {
public static void main(String[] args) throws ParseException {
String string = "2021年01月23日 18:27:07";
System.out.println("原始字串為:"+string);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss", Locale.getDefault());
Date date = simpleDateFormat.parse(string);
System.out.println("字串經過轉換變成的國際標準時間格式:"+date);
long timeStamp = date.getTime();
System.out.println("國際標準時間格式轉換成的時間戳為:"+timeStamp);
}
}
程式碼如下(輸出):
原始字串為:2021年01月23日 18:27:07
字串經過轉換變成的國際標準時間格式:Sat Jan 23 18:27:07 CST 2021
國際標準時間格式轉換成的時間戳為:1611397627000
總結
有人會問為什麼沒有日期物件轉換成字串呢,其實我已經說過了,向上一個大例子 3.定製日期輸出格式裡面的例子就是了。
從這幾個例子中我們可以發現的點是:
1、時間字串的格式應與SimpleDateFormat中的pattern一致。
2、只要遇見其他時間型別轉成字串的如下面黃色部分都是SimpleDateForma.format。遇見其轉成時間型別的就是SimpleDateForma.parse。
3、導包一定要導對
其實時間的日期的轉發還有多,但是基本上都有一個主流,但是最好理解的也有,作為初學者我更注重的是理解,現在的主流排其次吧。