c/c++ 計算1900年到當前時間的秒數


常見的時間函數能獲得從1970年1月1日到當前時間的秒數,這種就不多說了.

某天接到一個需求,其中一個字段的值要求取1900-01-01 00:00:00 到當前時間的秒數. 簡單查了資料便寫了代碼,后來被測試發現時間算錯了一天.於是重新整理如下:

計算邏輯:  

1900年到現在的時間 = 1970年到現在的時間 + 1900到1970年間的時間;

1970到現在的時間很容易取得,用time(time_t)就可以了(當然還有其它API可以應用)

1900到1970年間的時間是個常量:2208988800UL;

1900年~1970,共53個平年,17個閏年. 則 long long seconds = (long long)((1970 - 1900) * 365 + 17) * 24 * 60 * 60 = 2208988800;

簡單示例代碼如下:(vs2015+win10 64位)

#include <time.h> 
#include <stdio.h> 

int main()
{
    int a = 24, b = 60;
    //long long seconds = ((1970 - 1900) * 365 + 17) * a * b * b;    //不加強制轉換結果異常
    //long long seconds = ((1970 - 1900) * 365 + 17) * 24 * 60 * 60;    //warning C4307: “*”: 整型常量溢出
    long long seconds = (long long)((1970 - 1900) * 365 + 17) * 24 * 60 * 60;
    
    //double seconds = (double)((1970 - 1900) * 365 + 17) * 24 * 60 * 60;
    //long long seconds = 2208988800;    //or double
    time_t t;
    t = time(NULL);

    printf("seconds since is %ld\nseconds of 1900~1970 is %lf\nseconds from 1900 to now is %lf\n", (long )t, seconds , t + seconds);
    return 0;
}

巨人的肩膀:

https://www.aliyun.com/jiaocheng/537945.html

https://blog.csdn.net/luck_gg/article/details/3110506


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM