格林尼治時間指的是從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 所以格林平時和北...