C语言获取今天0点的时间戳

本文描述了一种在计算本地时间0点时间戳时出现的Bug,该Bug在8点前计算出的时间戳不正确。通过将tm结构体的时分秒清零并转换为时间戳,实现了正确的算法。

工作中遇到一个有趣的bug,在获取今天0点的时间戳时,我是这样算的:

 uint64_t today_timestamp() 
 {
     uint64_t now_time = time(NULL);
     // 当前时间戳 -(当前时间戳 % 24h)
    return now_time - (now_time % (60 * 60 * 24)) - 60 * 60 * 8;
 }

这个函数计算到的凌晨0点的时间戳,在早晨8点以后得到的结果是正确的,正好是工作的时间段,所以在工作的时候测的时候一直没有重现bug。这个函数忽略了一个问题,0时区的日期不一定等于+8时间的日期,只有在8点以后是相等的。
正确的算法是这样的:

// 直接把tm结构体的时分秒清零,然后转化成时间戳
uint64_t today_timestamp()
{   
    time_t t = time(NULL);
    struct tm * tm= localtime(&t);
    tm->tm_hour = 0;
    tm->tm_min = 0;
    tm->tm_sec = 0;
    return  mktime(tm);
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值