获取当前UnixTime的零点时间戳
最近有个需求,开屏广告每天只出一次。
思路为如果出了开屏广告,则记录当前时间,下次来的时候,读取当前时间和上一次出开屏的时间。
算一下是不是在同一天即可。
我们的第一个想法是将上次开屏时间和当前时间归一到 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