时区
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); // 时间戳转本地时间