自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

實體類不要再用Date了,JDK8有新的時間

開發(fā) 前端
我們在之前使用JDK7創(chuàng)建時間的時候,很多時候都選擇的時比較老版本的 Date、Calendar 以及 SimpleDateFormatter 等等,而我們接下來要使用的,就是 JDK8 中的日期,用來替換掉之前使用的。

阿粉今天想介紹的,就是我們再實體類中,很多時候會用到時間這個概念,比如說,記錄的創(chuàng)建時間Create_Time或者說是某些需要確定的日期,在數(shù)據(jù)庫存儲的時候,毋庸置疑,肯定是 datetime和date的數(shù)據(jù)類型,但是也有個別的比較過分,直接是用字符串,也就是varchar來進(jìn)行存儲,而我們在之前使用JDK7創(chuàng)建時間的時候,很多時候都選擇的時比較老版本的 Date、Calendar 以及 SimpleDateFormatter 等等。

不過 java.util.Date 也是被詬病已久,它包含了日期、時間、毫秒數(shù)等眾多繁雜的信息,其內(nèi)部利用午夜 12 點來區(qū)分日期,利用 1970-01-01 來計算時間;并且其月份從 0 開始計數(shù),而且用于獲得年、月、日等信息的接口也是太不直觀。

除此之外,java.util.Date與 SimpleDateFormatter 都不是類型安全的,

而我們接下來要使用的,就是 JDK8 中的日期,用來替換掉之前使用的。

JDK7 的日期 和 JDK8 的日期對比

JDK7 創(chuàng)建一個時間:

Date date0 = new Date();

JDK8 創(chuàng)建一個時間:

LocalDate today = LocalDate.now();

我們先看看這執(zhí)行出來都是啥?

Date輸出:

Wed Apr 13 13:19:06 CST 2022

LocalDate輸出:

2022-04-13

首先我們從輸出上,直接就感覺有點難受,Date輸出的看起來就不是那么的直觀,所以,當(dāng)你想要直觀的去輸出這個時間的時候,可能就得用到 SimpleDateFormat 去格式化一下我們的這個時間。但是如果是用 LocalDate 就不會有這種顧慮了。

Date格式化:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒");
String str = sdf.format(date0);

我們執(zhí)行一下在看:

JDK7格式化后的時間數(shù)據(jù)==2022-04-13
JDK8的時間數(shù)據(jù)==2022-04-13

首先,從代碼上,就直接少了很多,畢竟轉(zhuǎn)換時間相對來說是非常簡單的。

這時候就有人得噴阿粉,說如果我不想要這樣的數(shù)據(jù),那么我再JDK8 里面我怎么去轉(zhuǎn)換這個時間呢?

我 JDK7 可以用 SimpleDateFormat,但是這個類并不支持我用 LocalDate 呀,別著急呀。既然人家敢出這個,那么肯定也得想到對應(yīng)的方案。

JDK1.7及之前版本我們使用java.text.DataFormat 的子類(如SimpleDateFormat類)進(jìn)行日期時間的格式化。

JDK1.8之后我們可以使用 java.time.format.DateTimeFormatter來進(jìn)行日期時間的格式化。

 LocalDate now = LocalDate.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");

String JDK8Time = now.format(dateTimeFormatter);
System.out.println("JDK8格式化后的時間數(shù)據(jù)=="+JDK8Time);

我們看一下輸出結(jié)果:

JDK7格式化后的時間數(shù)據(jù)==2022/04/13
JDK8格式化后的時間數(shù)據(jù)==2022/04/13

這屬實沒毛病是吧,但是,眾所周知,SimpleDateFormat 是個線程不安全的,使用的時候,只能在方法內(nèi)部創(chuàng)建新的局部變量。

而 DateTimeFormatter 不但是不變對象,它還是線程安全的。所以 DateTimeFormatter 可以只創(chuàng)建一個實例,到處引用。

這就是阿粉推薦大家換一下的原因,因為字符串轉(zhuǎn)換時間的例子,用的地方實在是非常的多,我們在完成功能的同時,也需要盡量的保證自己代碼的安全。

我們既然已經(jīng)對比完成了,接下來就直接講一下 JDK8 中的各種時間的用法。畢竟沒有實戰(zhàn)的空說,都是讓人難以記憶的。

JDK8 日期的各種用法

String 轉(zhuǎn) LocalDate:

LocalDate localDate = LocalDate.now();

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd");

String dateStr = localDate.format(fmt);

System.out.println("LocalDate轉(zhuǎn)String:" + dateStr);

轉(zhuǎn)換結(jié)果:

LocalDate轉(zhuǎn)String:2022/04/14

data轉(zhuǎn)LocalDate:

Date date = new Date();

System.out.println("LocalDateTime():" + (new Date()).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());

轉(zhuǎn)換結(jié)果:

LocalDateTime():2022-04-14T10:07:52.868

時間戳轉(zhuǎn)LocalDateTime:


long timestamp = System.currentTimeMillis();

Instant instant1 = Instant.ofEpochMilli(timestamp);

System.out.println("時間戳 轉(zhuǎn) LocalDateTime:" + LocalDateTime.ofInstant(instant1, ZoneId.systemDefault()));

轉(zhuǎn)換結(jié)果:

時間戳 轉(zhuǎn) LocalDateTime:2022-04-14T10:09:14.780

具體的API還有很多很多阿粉列舉一下:

以上的API相對來說已經(jīng)是比較全免的,可以滿足日常開發(fā)的需求了,阿粉就不再一一的去測試了,如果是想看看結(jié)果的,大家不妨寫個測試 Demo 去試試吧。

責(zé)任編輯:趙寧寧 來源: Java極客技術(shù)
相關(guān)推薦

2022-03-01 07:37:30

MySQL場景框架

2022-03-30 07:32:10

JDK8異步編程

2021-08-07 07:48:28

JDKjava JDK17

2022-05-31 07:32:19

JDK8API工具

2009-09-10 10:09:46

LINQ to SQL

2022-04-21 09:48:54

JDK8JDK7編碼

2022-04-21 07:34:34

JDK8JDK7數(shù)據(jù)

2017-03-09 10:45:31

定義內(nèi)存泄漏

2024-05-16 08:28:20

類型處理器D3BootJSON

2022-07-22 09:15:07

OpitonalJava代碼

2020-04-22 10:35:57

實體類屬性映射

2024-06-27 08:36:12

Lodash對象類型isObject?

2021-01-15 10:03:18

JDK8日期API

2023-06-28 16:03:44

2011-06-01 15:45:28

實體類序列化

2023-01-04 08:53:52

JPA實體類注解

2024-04-08 07:27:02

JDK8ZGC垃圾回收

2021-05-19 10:37:16

WebFlux 前置工具

2020-12-02 11:18:50

print調(diào)試代碼Python

2023-01-12 09:13:49

Mybatis數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號