1,问题由来。
一直觉得linux系统的时间问题是个很杂乱的一个问题,现在又遇到了。所以想趁机好好地理一理。
- #include <stdio.h>
- #include <sys/io.h>
- unsigned char cmos_read(unsigned char addr)
- {
- unsigned char tmp = 0;
- iopl(3);
- outb(addr,0x70);
- tmp = inb(0x71);
- iopl(0);
- return tmp;
- }
- int main(void)
- {
- printf("seconds = %x\n",cmos_read(0));
- printf("minute = %x\n",cmos_read(2));
- printf("hour = %x\n",cmos_read(4));
- system("date");
- return 0;
- }
运行结果:
问题:为什么cmos里面的小时12,而linux系统中的时间是20 ?
----------------------------------------------------------------------------------------------
2,先说说时区。(顺便补一补地理知识)
如图所示:东十二区是最东边,那儿是一天的开始,“日界线”就标志昨天的结束,新一天的开始。
----------------------------------------------------------------------------------------------
3,时区。
3.1,什么是UTC?
整个地球分为二十四时区,每个时区都有自己的本地时间。在国际
无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时
(UTC, Universal Time Coordinated)。UTC与格林尼治平均时GMT, 一样,
都与英国伦敦的本地时相同。在本文中,UTC与GMT含义完全相同。
学过地理的人都知道,中国是在东边,学地理的时候说的都是东经多少
度,北京在东八区,也就是北京时间比UTC早八个小时,也就是在一天中我们
要比英国人早八个小时见到升起的太阳。
---------------------------------------------------------
3.2,说说什么是本地时间。
世界各地因地理位置不一样,各个地方都有自己的时间,在一些大
宾馆,可以看到前台到处都挂的钟,什么纽约时间,北京时间,伦敦时间等
等。本地时间很好理解。
在安装系统的时候,cmos里面放是UTC,操作系统要给用户显示本地
时间怎么办?人家在安装系统的时候会让你选择所在位置,然后配置一些信
息,让你的操作系统一启动就基于CMOS中的UTC计算出你所在的本地时间。
--------------------------------------------------------------------------
3.3,如何由UTC计算出本地时间?
公式:UTC + 时区差 = 本地时间
举上两个小例子就清楚了
北京是东八区,假如UTC这时是7(也就是现在伦敦时间是7),
北京时间就是7+8=15,也就是下午3点,也就是我们下午3点的时候,人
家伦敦现在天刚亮。纽约的时区是西五区,比UTC落后五个小时。同样
假如UTC现在是7点,纽约时间是7-5=2,人家现在就是凌晨2点。
----------------------------------------------------------------------------------------------
阅读(1869) | 评论(0) | 转发(2) |