常見的時間函數能獲得從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; }
巨人的肩膀: