时间戳与时区


时区

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM