您好,登錄后才能下訂單哦!
為啥會(huì)有這篇文章
最近接手了一個(gè)別人的老項(xiàng)目,拿到代碼,導(dǎo)入IDEA的那一瞬間,我哭出了聲 . . .
我瞥了一眼代碼,就知道這次肯定遇到了屎山!因?yàn)槲铱吹搅诉@種代碼:
我擦,這都什么年代了,怎么還在用 Date 來(lái)處理和表示時(shí)間!
完了完了 . . .
為啥Date遭嫌棄了
別的先不說(shuō),我們先來(lái)看幾個(gè)關(guān)于 Date 用法的例子,這玩意真的好用嗎?
一、我想新建一個(gè)表示"此刻"的日期,打印出來(lái):
第一行:這打印結(jié)果你第一眼能看明白?可讀性忒差了
第二行:今天是2019年,你給我返回個(gè)119,沒(méi)法讀
第三行:現(xiàn)在是12月份,你給我返回個(gè)11,這也沒(méi)法讀
二、假如我再想構(gòu)造一個(gè) 指定年、月、日 的時(shí)間,我嘗試這么去做:
你看到啥了,連構(gòu)造函數(shù)都 被棄用 了!
你可以再仔細(xì)瞅瞅,其實(shí) Date 里的很多方法現(xiàn)在都 已經(jīng)棄用 了!
都這樣了,你項(xiàng)目還敢用這個(gè)嗎?你醒醒吧!
LocalDateTime不香嗎?
自 Java8 開(kāi)始, JDK 中其實(shí)就增加了一系列表示日期和時(shí)間的新類(lèi),最典型的就是 LocalDateTime 。直言不諱,這玩意的出現(xiàn)就是為了干掉之前 JDK 版本中的 Date 老哥!
同樣,我們也先來(lái)感受一下用法!
一、獲取當(dāng)前此刻的時(shí)間
干得漂亮!
二、構(gòu)造一個(gè)指定年、月、日 的時(shí)間:
比如,想構(gòu)造: 2019年10月12月12日9時(shí)21分32秒
沒(méi)毛??!
三、修改日期
夠靈活!
四、格式化日期
我無(wú)話(huà)可說(shuō),漂亮
五、時(shí)間反解析
給你一個(gè)陌生的字符串,你可以按照你需要的格式把時(shí)間給反解出來(lái)
tql!
零零散散舉了這么些例子,我想 LocalDateTime 怎么地也不輸 Date 吧!
線(xiàn)程安全性問(wèn)題!
其實(shí)上面講來(lái)講去只講了兩者在用法上的差別,這其實(shí)倒還好,并不致命,可是接下來(lái)要討論的 線(xiàn)程安全性問(wèn)題 才是致命的!
其實(shí)以前我們慣用的 Date 時(shí)間類(lèi)是可變類(lèi),這就意味著在多線(xiàn)程環(huán)境下對(duì)共享 Date 變量進(jìn)行操作時(shí),必須 由程序員自己來(lái)保證線(xiàn)程安全 !否則極有可能翻車(chē)。
而自 Java8 開(kāi)始推出的 LocalDateTime 卻是線(xiàn)程安全的,開(kāi)發(fā)人員不用再考慮并發(fā)問(wèn)題,這點(diǎn)我們從 LocalDateTime 的官方源碼中即可看出:
不說(shuō)別的,就光一句:
你就沒(méi)有任何理由不用 LocalDateTime !
日期格式化的選擇
大家除了慣用 Date 來(lái)表示時(shí)間之外,還有一個(gè)用于和 Date 連用的 SimpleDateFormat 時(shí)間格式化類(lèi)大家可能也戒不掉了!
SimpleDateFormat 最主要的致命問(wèn)題也是在于它本身 并不線(xiàn)程安全 ,這在它的源碼注釋里已然告知過(guò)了:
那取而代之,我們現(xiàn)在改用什么呢?其實(shí)在前文已經(jīng)用到啦,那就是了 DateTimeFormatter了,他也是線(xiàn)程安全的:
小聲BB
好了,說(shuō)了這么多,如果你項(xiàng)目里還在使用 Date 或者 SimpleDateFormat 的話(huà),答應(yīng)我,二話(huà)別說(shuō),趕快全部偷偷去改掉,快!速度!跑步前進(jìn)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。