1. 首页
  2. 未分类

什么?你项目还在用Date表示时间

“u003Cblockquote class=”pgc-blockquote-abstract”u003Eu003Cpu003E专注于Java领域优质技术,欢迎关注u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E作者: hansonwong99 来自:CodeSheep u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F579c78d2c8424994a61899fd7c3dd7ae” img_width=”1080″ img_height=”810″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Chru002Fu003Eu003Ch1 class=”pgc-h-arrow-right”u003E 为啥会有这篇文章 u003Cu002Fh1u003Eu003Cpu003E最近接手了一个别人的老项目,拿到代码,导入IDEA的那一瞬间,我哭出了声 . . .u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F84c39e00a07b4c618785d7552c4b7400″ img_width=”77″ img_height=”86″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E我瞥了一眼代码,就知道这次肯定遇到了屎山!因为我看到了这种代码:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fdd863e51b706452c9384b86c72dd96f9″ img_width=”826″ img_height=”270″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E我擦,这都什么年代了,怎么还在用 Date来处理和表示时间!u003Cu002Fpu003Eu003Cpu003E完了完了 . . .u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Ffc75b62617324d4d8734131e38472826″ img_width=”312″ img_height=”364″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Chru002Fu003Eu003Ch1 class=”pgc-h-arrow-right”u003E 为啥Date遭嫌弃了 u003Cu002Fh1u003Eu003Cpu003E别的先不说,我们先来看几个关于 Date用法的例子,这玩意真的好用吗?u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E一、我想新建一个表示"此刻"的日期,打印出来:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cbru002Fu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F289900395aa74791bbe05cc26050b5b7″ img_width=”699″ img_height=”207″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cbru002Fu003Eu003Cu002Fpu003Eu003Cul class=”list-paddingleft-2″u003Eu003Cliu003E第一行:这打印结果你第一眼能看明白?可读性忒差了u003Cu002Fliu003Eu003Cliu003E第二行:今天是2019年,你给我返回个119,没法读u003Cu002Fliu003Eu003Cliu003E第三行:现在是12月份,你给我返回个11,这也没法读u003Cu002Fliu003Eu003Cu002Fulu003Eu003Cpu003Eu003Cstrongu003E二、假如我再想构造一个指定年、月、日的时间,我尝试这么去做:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpreu003Eu003Ccodeu003EDate beforeDate = new Date(2019,12,12);u003Cu002Fcodeu003Eu003Cu002Fpreu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F336033d1089a4328b4c3a08384daef7c” img_width=”972″ img_height=”144″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E你看到啥了,连构造函数都u003Cstrongu003E被弃用u003Cu002Fstrongu003E了!u003Cu002Fpu003Eu003Cpu003E你可以再仔细瞅瞅,其实 Date里的很多方法现在都u003Cstrongu003E已经弃用u003Cu002Fstrongu003E了!u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F33e8f223bfce4a9895991d8919091f19″ img_width=”710″ img_height=”961″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E都这样了,你项目还敢用这个吗?你醒醒吧!u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F878ac29f22fd42cfbe691de2b66b2053″ img_width=”240″ img_height=”240″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Chru002Fu003Eu003Ch1 class=”pgc-h-arrow-right”u003E LocalDateTime不香吗? u003Cu002Fh1u003Eu003Cpu003E自 Java8开始, JDK中其实就增加了一系列表示日期和时间的新类,最典型的就是 LocalDateTime。直言不讳,这玩意的出现就是为了干掉之前 JDK版本中的 Date老哥!u003Cu002Fpu003Eu003Cpu003E同样,我们也先来感受一下用法!u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E一、获取当前此刻的时间u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003Eu003Cbru002Fu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002Fb26f839b65404e80ab0065c958f2dfdd” img_width=”699″ img_height=”375″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E干得漂亮!u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fc91e6abded2f4f0b857bc0c9db347509″ img_width=”640″ img_height=”428″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E二、构造一个u003Cu002Fstrongu003E指定年、月、日u003Cstrongu003E的时间:u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E比如,想构造:2019年10月12月12日9时21分32秒u003Cu002Fpu003Eu003Cpreu003Eu003Ccodeu003ELocalDateTime beforeDate = LocalDateTime.of(2019, Month.DECEMBER, 12, 9, 21, 32);u003Cu002Fcodeu003Eu003Cu002Fpreu003Eu003Cpu003E没毛病!u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F52fcc4ed11d8478b8c4b668f5788a660″ img_width=”200″ img_height=”200″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E三、修改日期u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F74e0e53345fd417487296415818fc642″ img_width=”709″ img_height=”162″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E够灵活!u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fb7fbe2d4456b4ee1846fa1b1f6959afa” img_width=”173″ img_height=”144″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003Eu003Cstrongu003E四、格式化日期u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002Fd906d91d04b34f75b2f06d7c30071a29″ img_width=”697″ img_height=”290″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E我无话可说,漂亮u003Cu002Fpu003Eu003Cpu003Eu003Cstrongu003E五、时间反解析u003Cu002Fstrongu003Eu003Cu002Fpu003Eu003Cpu003E给你一个陌生的字符串,你可以按照你需要的格式把时间给反解出来u003Cu002Fpu003Eu003Cpreu003Eu003Ccodeu003ELocalDateTime time = LocalDateTime.parse("2002–01–02 11:21",DateTimeFormatter.ofPattern("yyyy–MM–dd HH:mm"));System.out.println("字符串反解析后的时间为:" + time);u002Fu002F 输出:字符串反解析后的时间为:2002-01-02T11:21u003Cu002Fcodeu003Eu003Cu002Fpreu003Eu003Cpu003Etql!u003Cu002Fpu003Eu003Cpu003E零零散散举了这么些例子,我想 LocalDateTime怎么地也不输 Date吧!u003Cu002Fpu003Eu003Chru002Fu003Eu003Ch1 class=”pgc-h-arrow-right”u003E 线程安全性问题! u003Cu002Fh1u003Eu003Cpu003E其实上面讲来讲去只讲了两者在用法上的差别,这其实倒还好,并不致命,可是接下来要讨论的u003Cstrongu003E线程安全性问题u003Cu002Fstrongu003E才是致命的!u003Cu002Fpu003Eu003Cpu003E其实以前我们惯用的 Date时间类是可变类,这就意味着在多线程环境下对共享 Date变量进行操作时,必须u003Cstrongu003E由程序员自己来保证线程安全u003Cu002Fstrongu003E!否则极有可能翻车。u003Cu002Fpu003Eu003Cpu003E而自 Java8开始推出的 LocalDateTime却是线程安全的,开发人员不用再考虑并发问题,这点我们从 LocalDateTime的官方源码中即可看出:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002F90b2e0ef09c748809f63174833fdd539″ img_width=”1080″ img_height=”468″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E不说别的,就光一句:u003Cu002Fpu003Eu003Cpreu003Eu003Ccodeu003EThis class is immutable and thread-safe. (不可变、线程安全!)u003Cu002Fcodeu003Eu003Cu002Fpreu003Eu003Cpu003E你就没有任何理由不用 LocalDateTime!u003Cu002Fpu003Eu003Chru002Fu003Eu003Ch1 class=”pgc-h-arrow-right”u003E 日期格式化的选择 u003Cu002Fh1u003Eu003Cpu003E大家除了惯用 Date来表示时间之外,还有一个用于和 Date连用的 SimpleDateFormat 时间格式化类大家可能也戒不掉了!u003Cu002Fpu003Eu003Cpu003ESimpleDateFormat最主要的致命问题也是在于它本身u003Cstrongu003E并不线程安全u003Cu002Fstrongu003E,这在它的源码注释里已然告知过了:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F5269cfa811ed43edbda2ee07a5f7bd91″ img_width=”1080″ img_height=”463″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E那取而代之,我们现在改用什么呢?其实在前文已经用到啦,那就是了 DateTimeFormatter了,他也是线程安全的:u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002Fdb1f16048459416388ff5fb054f90a4a” img_width=”1080″ img_height=”554″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Chru002Fu003Eu003Ch1 class=”pgc-h-arrow-right”u003E 小声BB u003Cu002Fh1u003Eu003Cpu003E好了,说了这么多,如果你项目里还在使用 Date或者 SimpleDateFormat的话,答应我,二话别说,赶快全部偷偷去改掉,快!速度!跑步前进!u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp3.pstatp.comu002Flargeu002Fpgc-imageu002F8c935552b97544f4ba016576706086ae” img_width=”528″ img_height=”504″ alt=”什么?你项目还在用Date表示时间” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:什么?你项目还在用Date表示时间

主题测试文章,只做测试使用。发布者:IT资讯科技,转转请注明出处:http://www.cxybcw.com/26236.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code