what?你項目還在用Date表示時間

爲啥會有這篇文章程序員

最近接手了一個別人的老項目,拿到代碼,導入IDEA的那一瞬間,我哭出了聲 . . .
what?你項目還在用Date表示時間安全

我瞥了一眼代碼,就知道此次確定遇到了屎山!由於我看到了這種代碼:
what?你項目還在用Date表示時間多線程

我擦,這都什麼年代了,怎麼還在用 Date 來處理和表示時間!併發

完了完了 . . .
what?你項目還在用Date表示時間ide

爲啥Date遭嫌棄了函數

別的先不說,咱們先來看幾個關於 Date 用法的例子,這玩意真的好用嗎?線程

1、我想新建一個表示"此刻"的日期,打印出來:
第一行:這打印結果你第一眼能看明白?可讀性忒差了
第二行:今天是2019年,你給我返回個119,無法讀
第三行:如今是12月份,你給我返回個11,這也無法讀
2、假如我再想構造一個 指定年、月、日 的時間,我嘗試這麼去作:
what?你項目還在用Date表示時間orm

你看到啥了,連構造函數都 被棄用 了!blog

你能夠再仔細瞅瞅,其實 Date 裏的不少方法如今都 已經棄用 了!
what?你項目還在用Date表示時間開發

都這樣了,你項目還敢用這個嗎?你醒醒吧!
what?你項目還在用Date表示時間

LocalDateTime不香嗎?

自 Java8 開始, JDK 中其實就增長了一系列表示日期和時間的新類,最典型的就是 LocalDateTime 。直言不諱,這玩意的出現就是爲了幹掉以前 JDK 版本中的 Date 老哥!

一樣,咱們也先來感覺一下用法!

1、獲取當前此刻的時間

幹得漂亮!
what?你項目還在用Date表示時間

2、構造一個指定年、月、日 的時間:

好比,想構造: 2019年10月12月12日9時21分32秒

沒毛病!
what?你項目還在用Date表示時間

3、修改日期

夠靈活!
what?你項目還在用Date表示時間

4、格式化日期

我無話可說,漂亮

5、時間反解析

給你一個陌生的字符串,你能夠按照你須要的格式把時間給反解出來

tql!

零零散散舉了這麼些例子,我想 LocalDateTime 怎麼地也不輸 Date 吧!

線程安全性問題!

其實上面講來說去只講了二者在用法上的差異,這其實倒還好,並不致命,但是接下來要討論的 線程安全性問題 纔是致命的!

其實之前咱們慣用的 Date 時間類是可變類,這就意味着在多線程環境下對共享 Date 變量進行操做時,必須 由程序員本身來保證線程安全 !不然極有可能翻車。

而自 Java8 開始推出的 LocalDateTime 倒是線程安全的,開發人員不用再考慮併發問題,這點咱們從 LocalDateTime 的官方源碼中便可看出:
what?你項目還在用Date表示時間

不說別的,就光一句:

你就沒有任何理由不用 LocalDateTime !

日期格式化的選擇

你們除了慣用 Date 來表示時間以外,還有一個用於和 Date 連用的 SimpleDateFormat 時間格式化類你們可能也戒不掉了!

SimpleDateFormat 最主要的致命問題也是在於它自己 並不線程安全 ,這在它的源碼註釋裏已然告知過了:
what?你項目還在用Date表示時間

那取而代之,咱們如今改用什麼呢?其實在前文已經用到啦,那就是了 DateTimeFormatter了,他也是線程安全的:
what?你項目還在用Date表示時間

小聲BB

好了,說了這麼多,若是你項目裏還在使用 Date 或者 SimpleDateFormat 的話,答應我,二話別說,趕快所有偷偷去改掉,快!速度!跑步前進!
what?你項目還在用Date表示時間

相關文章
相關標籤/搜索