最近有個需求,開屏廣告每天只出一次。
思路為如果出了開屏廣告,則記錄當前時間,下次來的時候,讀取當前時間和上一次出開屏的時間。
算一下是不是在同一天即可。
我們的第一個想法是將上次開屏時間和當前時間歸一到 0 點進行比較(其實有寫個更簡單的方法)。
所以我們需要獲取某一個時間戳 當天的 0點。
可以采用 localtime_r 的方式,如 這篇文章 C/C++代碼獲取今天凌晨零點零時零分的時間戳,但之前的blog中也寫了,這個函數的實現有個全局鎖,會影響效率。
所以想通過一些簡單的計算來得到0點。
找到的公式為:NowTime - (NowTime + 8 * 3600) % 86400
NowTime % 86400是0時區當天的秒數,那+8時區應該是NowTime % 86400 + 8 * 3600,由於這個數字可能大於86400,所以用(NowTime % 86400 + 8 * 3600) % 86400
等價於(NowTime + 8 * 3600) % 86400