mktime 依賴本地時區,導致不同機器對同一 tm 結構轉出的 time_t 不一致。需指定時區統一轉換。
time_t now = time(nullptr);
struct tm *lt = localtime(&now);
int gmtoff = lt->tm_gmtoff; // GNU 擴展,非標準timezone 全域變數(秒,西為正):extern long timezone;
time_t utc = mktime(&tm) - timezone;(注意夏令時)。date.h (C++20 chrono 前身) 或 IANA tz database 庫,明確指定時區轉換:auto zt = date::make_zoned("Asia/Shanghai", local_time);
time_t utc = date::sys_seconds(zt.get_sys_time()).time_since_epoch().count();若無法引入第三方庫,可在所有節點統一設定環境變數 TZ=UTC 並呼叫 tzset(),再用 mktime,得到 UTC 時間戳。