通过unixtime判断时间翻篇

来源:互联网 发布:卫生许可证制作软件 编辑:程序博客网 时间:2024/05/18 00:21
工作中经常用到需要按天来重置一些临时数据的需求,例如每日积分、每日奖励等,需要在每天某个指定的时间点来重新计算。
常用到的方式,记录上次清理的unixtime,下次查询的时候,根据当前unixtime和记录里的unixtime来判断是否处于同一个时间段。
如果以0点为界限,处理起来还是比较简单,通畅通过localtime_r转成 struct tm的方式,这样可以判断tm_year/tm_mon/tm_mday是否相等,或者tm_year/tm_yday是否相等


但如果不是以0点为界限(比如帮用户暂存的一些临时数据,0点用户在线还是很高的,这时候清理不太友好),处理的逻辑就麻烦很多。比如 以凌晨3点为界,1号3点到2号3点是一个时间段。这样判断是否清理的逻辑想想就头大,要写好多行。而且这样频繁调用localtime性能也不算太高。


所以这时候转换一下思维,unixtime记录的是从1970年1月1号0点到现在的秒数。那根据unixtime算出目前是从原点开始的第几天,判断这个天数是否相等就可以了。唯一要留意的是,unixtime是用的UTC时间,需要考虑时区。
这样,由于北京时间是东8区,比UTC早8个小时,所以以0点为界的判断如下


(t1+8*3600)/86400 == (t2+8*3600)/86400


如果以3点为界的判断为(东8区的3点,就是东5区的0点)
(t1+5*3600)/86400 == (t2+5*3600)/86400


其他时间点类推
原创粉丝点击