GMT: Greenwich Mean Time 格林尼治平均时。
UTC与GMT:
UTC相当于本初子午线(即经度0度)上的平均太阳时,过去曾用格林威治平均时(GMT)来表示
这两者几乎是同一概念。它们都是指的格林尼治标准时间,只不过UTC的称呼更为正式一点。两者的区别在于前者是一个天文上的概念,而后者是基于一个原子钟。
UTC与本地时间
UTC + 时区差 = 本地时间
时区差东为正,西为负。在此,把东八区时区差记为 +0800,
UTC + (+0800) = 本地(北京)时间 (1)
那么,UTC = 本地时间(北京时间))- 0800 (2)
0942 - 0800 = 0142
即UTC是当天凌晨一点四十二分二十二秒。如果结果是负数就意味着是UTC前一天,把这个负数加上2400就是UTC在前一天的时间。例如,本地(北京)时间是 0432 (凌晨四点三十二分),那么,UTC就是 0432 - 0800 = -0368,负号意味着是前一天, -0368 + 2400 = 2032,既前一天的晚上八点三十二分。
UTC 与 Unix时间戳
在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。
题外话:你会碰到Y2038问题,2038年1月19日凌晨3:14:07秒(UTC),从1970年1月1日午夜开始算是2147483647秒.是 2的31次方-1.这个秒数就是Unix时间戳。
也就是32位系统表示带符号整数的情况下能够表示的最大整数.
这个短视问题没有办法解决,只能透过硬件升级,比如升级到64位,那么表示带符号整数的范围就是 2的-63 到 2的63次方-1 足够用上2920亿年了...
UTC时间、GMT时间、本地时间、Unix时间戳
linux C 实现.
#include <stdio.h>
#include <time.h>
int main(){
time_t timep; //时间的秒数类型...used for time in seconds
struct tm *p; //时间数组
time(&timep); //获取本地unix时间戳
printf("time()=:%d\n",timep);
p = localtime(&timep); //将时间化为结构.传入 时间戳的指针,返回 tm类型的结构指针.
timep = mktime(p); //使用mktime 能够将tm类型的时间转为 unix时间戳.
printf("time()->localtime()->mktime()=%d\n",timep);
return 0;
}