获取当前UnixTime的零点时间戳
2017-12-09 15:34
302 查看
最近有个需求,开屏广告每天只出一次。
思路为如果出了开屏广告,则记录当前时间,下次来的时候,读取当前时间和上一次出开屏的时间。
算一下是不是在同一天即可。
我们的第一个想法是将上次开屏时间和当前时间归一到 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
思路为如果出了开屏广告,则记录当前时间,下次来的时候,读取当前时间和上一次出开屏的时间。
算一下是不是在同一天即可。
我们的第一个想法是将上次开屏时间和当前时间归一到 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
相关文章推荐
- new Date()和System.currentTimeMillis()获取当前时间戳
- linux下使用gettimeofday获取当前时间的注意事项
- gettimeofday() -- 获取当前时间(保存在结构体timeval中)【转】
- System.currentTimeMillis,getTimeInMillis与new Date().getTime获取当前时间戳耗时比较
- java使用new Date()和System.currentTimeMillis()获取当前时间戳
- time(NULL)与GetLocalTime获取当前时间
- JS获取当前日期时间/JS日期转化为unix时间戳
- JAVA获取当前系统时间System.currentTimeMillis()
- shell根据当前时间获取当月月初零点时间戳和月末时间戳
- System.currentTimeMillis,getTimeInMillis与new Date().getTime获取当前时间戳耗时比较
- JAVA获取当前系统时间System.currentTimeMillis()
- JAVA获取当前系统时间System.currentTimeMillis()
- VC++获取当前系统时间日期 GetSystemTime()函数的用法
- 获取UNIX主机当前时间的函数
- python time获取当前时间
- Delphi获取当前系统时间(使用API函数GetSystemTime)
- Java进阶(十六)使用new Date()和System.currentTimeMillis()获取当前时间戳
- JavaScript 时间与Unix时间戳互相转换,指定时间转换或获取当前时间
- JAVA获取当前系统时间System.currentTimeMillis()
- System.currentTimeMillis,getTimeInMillis与new Date().getTime获取当前时间戳耗时比较