typedef long time_t; —— 歷史上為有符號 32 位長整數,表示從 1970-01-01 00:00:00 UTC(Unix 紀元)起的秒數。
32 位有符號整數最大值 2,147,483,647 對應 2038-01-19 03:14:07 UTC。之後秒數溢出變為負數,導致時間邏輯錯亂。
| 編譯器/平台 | 64 位類型 | 獲取函數 | 支持範圍 |
|---|---|---|---|
| MSVC (Windows) | __time64_t | _time64() | 至 3001 年 |
| GCC/Clang (Linux/macOS) | time_t (64 位) | time() | 至 2.9 億年 |
| 嵌入式工具鏈 | 視配置 | 視配置 | 需查閱文檔 |
/* 日歷時間 → 分解時間 */
struct tm *gmtime(const time_t *timer); // UTC
struct tm *localtime(const time_t *timer); // 本地時區
/* 分解時間 → 日歷時間 */
time_t mktime(struct tm *timeptr);
/* 格式化輸出 */
char *asctime(const struct tm *timeptr); // 固定格式
char *ctime(const time_t *timer); // 等價 asctime(localtime(timer))
double difftime(time_t time1, time_t time0); // 秒差
int64_t 或平台 64 位類型time_t(GCC: _FILE_OFFSET_BITS=64)