Unix時間戳包含了豐富的時間信息,很多平臺都有時間戳的概念,也提供了不少操作時間戳的系統(tǒng)調用
創(chuàng)新互聯(lián)建站是一家專注于成都網(wǎng)站建設、做網(wǎng)站和成都西信服務器托管的網(wǎng)絡公司,有著豐富的建站經(jīng)驗和案例。這些系統(tǒng)調用固然強大,但我比較喜歡使用便捷的方法,而不是去調用系統(tǒng)函數(shù),下面分享敲代碼時候碰到的兩個小例子,我使用了非常規(guī)的做法,使效率提高了那么一點點。
當代碼變簡單,變高效,哪怕只是一點點,心情都是非常舒暢的~~~
定義:是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。
Example1
需求,一個存儲在Memcached(可理解為數(shù)據(jù)庫)的結構體,結構主要內容如下,每個玩家每天可以獲得MAX經(jīng)驗,exp字段表示今天得到的經(jīng)驗,這個字段用于判斷是否達到當天的最高經(jīng)驗
假設玩家要增加100經(jīng)驗,exp+100超過MAX了,那么他要增加的經(jīng)驗為 MAX-exp,在這之前要做一個判斷
先判斷是否今天第一次獲得經(jīng)驗,如果是,設置當前的時間到time,然后exp設置為100
這時候一般做法可能是,把time和當前時間提取出來,獲取他們的年月日,來判斷是否同一天,如果不是同一天,把當前時間設置為time
struct xx{
int exp; //經(jīng)驗
unsigned int time; //時間
};
我的做法是,獲取當前時間和time,但這個time我不會把時間戳存進去,而是計算之后的一個數(shù)值
一天的時間為60*60*24=86400
#define DAYTIME 86400
當前時間/DAYTIME 和 time做判斷,如果相等,表示同一天,如果不相等,把當前時間/DAYTIME 設置為time
兩種做法相比較,第一種需要調用兩次系統(tǒng)函數(shù),來獲取tm,還有一次time系統(tǒng)調用,然后做3次判斷,年月日
第二種,只調用一次time系統(tǒng)調用,做一次除法和一次判斷,搞定
Example2
需求,在Memcached存一個數(shù)據(jù),需要設置超時時間,每日凌晨過期,這樣的需求很廣泛,每日任務之類的都可以有這種需求
那么在設置這個key的時候,需要指定超時時間~,指定距離今日凌晨剩余的秒數(shù)。PS(當秒數(shù)為0的時候,需要設置為86400,不然0在memcached中的意思是,永不超時)
常規(guī)做法,通過系統(tǒng)函數(shù)獲取當日的時分秒,然后計算出當日逝去的秒數(shù),最后86400-秒數(shù),設置為超時時間
我的做法,
#define DAYTIME 86400
當前時間%DAYTIME 即可得到當日逝去的秒數(shù),然后86400-當日逝去的秒數(shù),設置為超時時間
兩種做法相比較,第一種需要額外調用一次系統(tǒng)函數(shù),兩次乘法兩次加法 時*3600+分*60+秒得到當日逝去秒數(shù)
第二種,只做了一個取模操作,就得到了上面若干步驟得到的結果
如果你有其他高效的做法,歡迎分享,互相學習
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。