Java中獲取時(shí)間戳的三種方式對(duì)比實(shí)現(xiàn)
Java中獲取時(shí)間戳 三種方式對(duì)比
最近項(xiàng)目開(kāi)發(fā)過(guò)程中發(fā)現(xiàn)了項(xiàng)目中獲取時(shí)間戳的業(yè)務(wù)。而獲取時(shí)間戳有以下三種方式,首先先聲明推薦使用System類(lèi)來(lái)獲取時(shí)間戳,下面一起看一看三種方式。
1.System.currentTimeMillis()
System類(lèi)中的currentTimeMillis()方法是三種方式中效率最好的,運(yùn)行時(shí)間最短。開(kāi)發(fā)中如果設(shè)計(jì)到效率問(wèn)題,推薦使用此種方式獲取。
System.currentTimeMillis()
2.new Date().getTime()
除了System類(lèi),使用量很大的應(yīng)該就是Date類(lèi)了,包括我也一樣開(kāi)發(fā)中如果涉及到日期的首先會(huì)想到Date,但date類(lèi)中獲取時(shí)間戳并不是最有效率的,翻看他的源碼:
無(wú)參構(gòu)造如下👇
public Date() { this(System.currentTimeMillis()); }
從源碼可以看出,new Date()其實(shí)就是調(diào)用了System.currentTimeMillis(),再傳入自己的有參構(gòu)造函數(shù)。不難看出,如果只是僅僅獲取時(shí)間戳,即使是匿名的new Date()對(duì)象也會(huì)有些許的性能消耗, 從提升性能的角度來(lái)看,只是僅僅獲取時(shí)間戳,不考慮時(shí)區(qū)的影響(時(shí)區(qū)為什么會(huì)有影響看下一段),直接調(diào)用System.currentTimeMillis()會(huì)更好一些。
3.Calendar.getInstance().getTimeInMillis()
這種方式其實(shí)是速度最慢,看其源碼就會(huì)發(fā)現(xiàn),Canlendar是區(qū)分時(shí)區(qū)的,因?yàn)橐幚頃r(shí)區(qū)問(wèn)題會(huì)耗費(fèi)很多的時(shí)間。
附測(cè)試如下:
import java.util.Calendar; import java.util.Date; public class TimeTest { private static long _TEN_THOUSAND=10000; public static void main(String[] args) { long times=1000*_TEN_THOUSAND; long t1=System.currentTimeMillis(); testSystem(times); long t2=System.currentTimeMillis(); System.out.println(t2-t1); testCalander(times); long t3=System.currentTimeMillis(); System.out.println(t3-t2); testDate(times); long t4=System.currentTimeMillis(); System.out.println(t4-t3); } public static void testSystem(long times){//use 188 for(int i=0;i<times;i++){ long currentTime=System.currentTimeMillis(); } } public static void testCalander(long times){//use 6299 for(int i=0;i<times;i++){ long currentTime=Calendar.getInstance().getTimeInMillis(); } } public static void testDate(long times){ for(int i=0;i<times;i++){ long currentTime=new Date().getTime(); } } }
效果如下
187
7032
297
Calendar.getInstance().getTimeInMillis() 這種方式速度最慢,這是因?yàn)镃anlendar要處理時(shí)區(qū)問(wèn)題會(huì)耗費(fèi)較多的時(shí)間。
到此這篇關(guān)于Java中獲取時(shí)間戳的三種方式對(duì)比實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Java 獲取時(shí)間戳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot熱部署和整合Mybatis的過(guò)程
熱部署,就是在應(yīng)用正在運(yùn)行的時(shí)候升級(jí)軟件,卻不需要重新啟動(dòng)應(yīng)用,本文給大家詳細(xì)介紹SpringBoot熱部署和整合Mybatis的過(guò)程,感興趣的朋友跟隨小編一起看看吧2023-10-10Web容器啟動(dòng)過(guò)程中如何執(zhí)行Java類(lèi)
這篇文章主要介紹了Web容器啟動(dòng)過(guò)程中如何執(zhí)行Java類(lèi),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10SpringBoot密碼加密的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot密碼加密的實(shí)現(xiàn)示例,包括引入依賴(lài)、配置加密工具、生成加密密鑰、加密密碼、配置解密,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08java 通過(guò)發(fā)送json,post請(qǐng)求,返回json數(shù)據(jù)的方法
下面小編就為大家分享一篇java 通過(guò)發(fā)送json,post請(qǐng)求,返回json數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn)
這篇文章主要介紹了Java Lambda表達(dá)式原理及多線程實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07idea中java及java web項(xiàng)目的常見(jiàn)問(wèn)題及解決
在IDEA中處理亂碼問(wèn)題主要涉及四個(gè)方面:文件編碼設(shè)置為UTF-8、編輯器默認(rèn)編碼調(diào)整、Tomcat運(yùn)行配置編碼設(shè)置以及解決cmd中的亂碼,此外,詳細(xì)介紹了在IDEA中創(chuàng)建Web項(xiàng)目的步驟,包括新建Java工程、添加Web框架支持、添加Tomcat依賴(lài)庫(kù)2024-09-09springboot2.X整合prometheus監(jiān)控的實(shí)例講解
這篇文章主要介紹了springboot2.X整合prometheus監(jiān)控的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03Java maven三種倉(cāng)庫(kù),本地倉(cāng)庫(kù),私服,中央倉(cāng)庫(kù)的配置
今天給大家簡(jiǎn)單介紹Maven三種倉(cāng)庫(kù)的配置,文中有非常詳細(xì)的解釋,對(duì)Java初學(xué)者很有幫助喲,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助2021-09-09劍指Offer之Java算法習(xí)題精講二叉樹(shù)專(zhuān)題篇上
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03