時區
UTC 協調世界時,又稱世界統一時間、世界標准時間、國際協調時間。此外還有其他一些時區,例如:北京時間、美國時間。
時間戳
Unix 時間戳是從 1970-1-1 00:00:00 UTC (北京時間1970-01-01 08:00:00)開始所經過的秒數,不考慮閏秒,又名 Unix epoch、Unix time、POSIX time。
時區與時間戳的關系
在某一個具體的時刻,時間戳只有一個,例如,筆者剛讀取了一次時間戳,該值為1567819100。在該時刻,用戶在中國、朝鮮、巴基斯坦、美國讀取的值都是一樣的,因為時間戳是相對於UTC時間的。
對於時區則有所不同,該時刻可以表示為很多時間,如下圖所示:
C API
C語言提供了時間戳類型和時間類型,並提供了函數用於二者之間的轉換,如下所示:
typedef long time_t; struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; struct tm *gmtime(time_t const *time_value); // 時間戳轉 UTC 時間 char *setlocale(int category, char const *locale); // 設置Local struct tm *localtime(time_t const *time_value); // 時間戳轉本地時間