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);
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章