根据《UNIX环境高级编程(第2版)》中文版P142摘要:
UNIX在这方面与其他操作系统的区别是:
(a) 以国际标准时间而非本地时间计时;
(b) 可自动进行转换,例如变换到夏时制;
(c) 将时间和日期作为一个量值保存。
看了《C专家编程》作者所述,有点迷糊了,只怪当年地理没学好……但还是敲个代码实践下吧,保存的文件名 04.c:
#include <stdio.h>
#include <time.h>
int main(int argc, char *argv[])
{
time_t currentTime;
// 获取当前时间和日期,UTC时间(日历时间)
currentTime = time(NULL);
// ctime()函数把参数转换为当地时间,受时区影响
printf("本地时间:%s", ctime(¤tTime));
// localtime() 本地时间,受时区影响;用actime()将结果转换成字符串
printf("本地时间:%s", asctime(localtime(¤tTime)));
// gmtime()获取UTC时间,用actime()将结果转换成字符串,不受时区影响
printf("UTC时间 :%s", asctime(gmtime(¤tTime)));
return 0;
}
弄完代码,发现,原来《UNIX环境高级编程(第2版)》中文版中的写的日历时间是标准时间,百度百科定义如下:
日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。
这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。在C语言中通过time函数获得日历时间。
然后,编译并运行:
$ gcc 04.c -Wall
$ ./a.out
本地时间:Fri Apr 18 20:45:55 2014
本地时间:Fri Apr 18 20:45:55 2014
UTC时间 :Fri Apr 18 12:45:55 2014
至于新西兰时间,真迷糊了。这么奇怪的地理位置……继续迷糊吧