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

工作中遇到一个有趣的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);
}


你可能感兴趣的:(其它)