偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

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

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

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

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

JDK7 的日期 和 JDK8 的日期對(duì)比

JDK7 創(chuàng)建一個(gè)時(shí)間:

Date date0 = new Date();

JDK8 創(chuàng)建一個(gè)時(shí)間:

LocalDate today = LocalDate.now();

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

Date輸出:

Wed Apr 13 13:19:06 CST 2022

LocalDate輸出:

2022-04-13

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

Date格式化:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

這就是阿粉推薦大家換一下的原因,因?yàn)樽址D(zhuǎn)換時(shí)間的例子,用的地方實(shí)在是非常的多,我們?cè)谕瓿晒δ艿耐瑫r(shí),也需要盡量的保證自己代碼的安全。

我們既然已經(jīng)對(duì)比完成了,接下來就直接講一下 JDK8 中的各種時(shí)間的用法。畢竟沒有實(shí)戰(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

時(shí)間戳轉(zhuǎn)LocalDateTime:


long timestamp = System.currentTimeMillis();

Instant instant1 = Instant.ofEpochMilli(timestamp);

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

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

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

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

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

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

2022-03-01 07:37:30

MySQL場(chǎng)景框架

2025-08-18 09:35:02

2022-03-30 07:32:10

JDK8異步編程

2022-05-31 07:32:19

JDK8API工具

2021-08-07 07:48:28

JDKjava JDK17

2009-09-10 10:09:46

LINQ to SQL

2022-04-21 07:34:34

JDK8JDK7數(shù)據(jù)

2022-04-21 09:48:54

JDK8JDK7編碼

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

實(shí)體類屬性映射

2024-06-27 08:36:12

Lodash對(duì)象類型isObject?

2023-06-28 16:03:44

2021-01-15 10:03:18

JDK8日期API

2025-10-20 02:00:00

JDK8JDK17Java

2020-12-02 11:18:50

print調(diào)試代碼Python

2024-04-08 07:27:02

JDK8ZGC垃圾回收

2021-05-19 10:37:16

WebFlux 前置工具

2020-12-04 10:05:00

Pythonprint代碼
點(diǎn)贊
收藏

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