格林尼治秒可以跑多久?

2021-06-09 17:19:52 字數 1197 閱讀 8863

格林尼治時間指的是從2023年1月1日開始算的秒數,如果用uint32型別來儲存這個值,程式能跑多久才會溢位呢?

unsigned int max_u32 = 0xffffffff;

float x1 = (max_u32 - time(null)) / (365 * 24 * 60 * 60); // 93年,這是我執行時候的結果,即從我執行程式的時候(2023年的某一天)起跑大約93年才會溢位

float x2 = max_u32 / (365 * 24 * 60 * 60); // 136年,指的是從2023年1月1日起跑大約136年才會溢位

下面是用幾種型別的結果:

const int one_year_sceonds = 365 * 24 * 60 * 60;

int max_i32 = 0x7fffffff;

float fi1 = (max_i32 - time(null)) / (one_year_sceonds); // 25年

float fi2 = max_i32 / (one_year_sceonds); // 68年

unsigned int max_u32 = 0xffffffff;

float fu1 = (max_u32 - time(null)) / (one_year_sceonds); // 93年

float fu2 = max_u32 / (one_year_sceonds); // 136年

__int64 max_i64 = 0x7fffffffffffffff;

double di1 = (max_i64 - time(null)) / (one_year_sceonds); // 大的嚇人,可以放心使用

double di2 = max_i64 / (one_year_sceonds);

unsigned __int64 max_u64 = 0xffffffffffffffff;

double du1 = (max_u64 - time(null)) / (one_year_sceonds); // 更是大的嚇人,可以放心使用

double du2 = max_u64 / (one_year_sceonds);

結論:用int64和uint64比較安全。

注意,在windows上,time_t是64位的,但是在linux上,如果系統是32位的,則time_t是32位的,如果系統是64位的,則time_t是64位的(?未確認)。

日期 將格林尼治時間(GMT)轉化為北京時間

格里尼治時間,就是我們常常說的0度經線的地方平時,也叫格林平時,格林平時的英文是greenwich mean time,簡稱gmt,實際上就是ut universal time 也叫世界時的。從0度格林經線到120度東八區時區經線,經差為120度,換算成時間為8小時 120除以15 所以格林平時和北...