一、首先要弄清几个概念:
1. “系统时间”与“硬件时间”
系统时间: 一般说来就是我们执行 date 命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。
硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。
2. “UTC时间”与“本地时间”
UTC时间:Coordinated Universal Time 世界协调时间(又称世界标准时间、世界统一时间),在一般精度要求下,它与GMT(Greenwich Mean Time,格林威治标准时间)是一样的,其实也就是说 GMT≈UTC,但 UTC 是以原子钟校准的,更精确。
本地时间:由于处在不同的时区,本地时间一般与UTC是不同的,换算方法就是
本地时间 = UTC + 时区 或 UTC = 本地时间 - 时区
时区东为正,西为负,例如在中国,本地时间都使用北京时间,在linux上显示就是 CST(China Standard Time,中国标准时,注意美国的中部标准时Central Standard Time也缩写为CST,与这里的CST不是一回事!),时区为东八区,也就是 +8 区,所以 CST=UTC+(+8小时) 或 UTC=CST-(+8小时)。
二、时间命令
1. 系统时间 date
直接调用 date,得到的是本地时间。如果想得到UTC时间的话,使用 date -u。
[12-01 19:07> ~]$ date
2009年 12月 07日 星期一 14:22:20 CST
[12-01 19:07> ~]$ date -u
2009年 12月 07日 星期一 06:22:22 UTC
2. 硬件时间 /sbin/hwclock
直接调用 /sbin/hwclock 显示的时间就是 BIOS 中的时间吗?未必!这要看 /etc/sysconfig/clock 中是否启用了UTC,如果启用了UTC(UTC=true),显示的其实是经过时区换算的时间而不是BIOS中真正的时间,如果加上 --localtime 选项,则得到的总是 BIOS 中实际的时间.
[12-01 19:07> ~]# hwclock
2009年12月07日 星期一 14时28分43秒 -0.611463 seconds
[12-01 19:07> ~]# hwclock --utc
2009年12月07日 星期一 14时28分46秒 -0.594189 seconds
[12-01 19:07> ~]# hwclock --localtime
2009年12月07日 星期一 06时28分50秒 -0.063875 seconds
3. /etc/localtime
这个文件用来设置系统的时区,将 /usr/share/zoneinfo/ 中相应文件拷贝到/etc下并重命名为 localtime 即可修改时区设置,而且这种修改对 date 命令是及时生效的。不论是 date 还是 hwclock 都会用到这个文件,会根据这个文件的时区设置来进行UTC和本地之间之间的换算。
4. /etc/sysconfig/clock
这个文件只对 hwclock 有效,而且似乎是只在系统启动和关闭的时候才有用,比如修改了其中的 UTC=true 到 UTC=false 的前后,执行 hwclock (--utc, 或 --localtime) 都没有变化,要重启系统后才生效。注:如果设置 UTC=false 并重启系统后,执行一些命令结果如下:
date 2009年 12月 07日 星期一 19:26:29 CST
date -u 2009年 12月 07日 星期一 11:26:29 UTC
hwclock 2009年12月07日 星期一 19时26分30秒 -0.442668 seconds
hwclock --utc 2009年12月08日 星期二 03时26分31秒 -0.999091 seconds
hwclock --localtime 2009年12月07日 星期一 19时26分32秒 -0.999217 seconds
可见,如果不使用UTC,BIOS时间(红色部分)就是系统本地时间,而且注意这时执行 hwclock --utc 得到的结果没有任何意义,因为这里我们已经禁用了UTC,而且也明显不符合“本地时间=UTC+时区”的关系。
三、linux与windows双系统间的时间同步
系统启动和关闭时,硬件时间与系统时间之间的同步有两种方式(假设在中国,用CST代表本地时间):
方式A: 使用UTC(对linux就是 /etc/sysconfig/clock 中 UTC=true)
开机: BIOS--------->UTC(将BIOS中的时间看成是UTC)------(时区变化)----->CST
关机: CST -------(时区变化)----->UTC-------存储到------>BIOS
方式B: 不使用UTC(对linux就是 /etc/sysconfig/clock 中 UTC=false)
开机: BIOS----------------------->CST(将BIOS中的时间看成是CST)
关机: CST ---------存储到------>BIOS
通过设定 /etc/sysconfig/clock,linux可以支持这两种方式,然而windows只支持方式B(win7是默认支持B,通过设置也可以支持A),那么在双系统情况下,如果linux设成A方式,那么在linux与windows系统切换时一定会造成时间混乱的,解决办法就是将linux中的UTC禁用,也设成B方式就可以了。或者把win的方式改为A。方法为http://lovekaiyuan.iteye.com/blog/2044205
注:可以通过 hwclock --hctosys 来利用硬件时间来设置系统时间(注意不是简单的复制BIOS中的时间为系统时间,要看是否使用UTC,如果使用的话则要做时区换算),通过 hwclock --systohc 来根据系统时间设置硬件时间(也要看是否启用UTC来决定是否做时区换算)。总之,不论使用 --systohc 还是 --hctosys,同步后直接运行不带参数的 hwclock 得到的时间与直接运行 date 得到的时间应该一致,这个时间是否就是BIOS中的时间(hwclock --localtime)那就不一定了,如果启用了UTC就不是,没启用UTC就是。
而且要注意:在系统中手动使用 hwclock hwclock --set --date='yyyy-mm-dd' 来设置BIOS时间只在系统运行时有效,因为当系统关闭时,还会按设定好的方式根据系统时间来重设BIOS时间的,于是手动的设置便被覆盖掉了。
转载于:http://goodluck1982.blog.sohu.com/138950694.html
更详细的参考文章:
http://www.mike.org.cn/articles/linux-time-set-and-sync-ntp/
相关推荐
【知识点详解】 1. 关闭Linux系统:在给出的题目中,`halt`命令用于关闭Linux系统而...以上知识点详细解释了Linux系统管理、文件操作、网络服务、文本编辑和命令行工具的使用,这些都是Linux C编程面试中常见的问题。
编译内核是一个技术性很强的过程,需要对Linux系统有一定了解。对于新手来说,这是一次学习Linux内部机制的好机会,但也要注意避免可能导致系统无法启动的错误。如果不确定某些配置选项,建议保持默认设置,或查阅...
动态链接库(so库)是Linux系统下的一种动态链接共享库格式,常用于Linux系统中应用程序与共享库的链接。打包so库通常意味着对多个目标文件(.o文件)或已有库文件进行组合,生成单个的共享库文件(.so文件),以供...
例如,`sudo hwclock --systohc`将系统时间同步到硬件时钟。 **Hack 35. Display Date and Time in a Specific Format** `date`命令支持多种格式化选项。例如,`date +"%Y-%m-%d %H:%M:%S"`将日期和时间格式化为...
* 主机一和主机二为并行存取操作数据库方式,并结合硬件HA系统,实现并行计算,提高转载、查询、备份、维护的时间性能,突破主机内存和系统体系结构 * 主机二采用分区技术,划分一个分区作为逻辑主机三,提供应用...
- **OK210开发板简介**:采用ARM Cortex-A8处理器,支持Linux/Android操作系统。 - **应用领域**:广泛应用于工业控制、智能终端、物联网等领域。 - **ARMCortex-A8介绍**: - **架构特性**:高性能、低功耗,支持...
硬件部分,ARM处理器的模块化设计简化了开发流程,而软件部分则主要涉及操作系统,如Linux。在职业发展中,ARM开发工程师的工作往往侧重于软件开发,如驱动程序编写和嵌入式系统集成。因此,对于初学者来说,熟悉ARM...
一方面可以通过升级硬件来完成系统扩展,称为垂直或向上扩展(Vertical Scale/Scaling Up)。 另一方面,增加更多的服务器来完成系统扩展,称为水平扩展或者向外扩展(Horizontal Scale/Scaling Out)。尽管ES能够...
以上配置选项是Linux内核编译过程中非常重要的一部分,合理选择这些选项不仅可以提高内核的性能,还能满足特定硬件平台的需求。开发者可以根据自己的实际需求进行选择和调整,以达到最佳的效果。
- 飞思卡尔(Freescale,现为NXP半导体的一部分)提供了一站式嵌入式方案,其中包含高效能、低功耗、快速启动以及长生命周期的Linux系统和通用连接的支持。 - 在开发嵌入式产品时,了解目标硬件平台的特性是至关...
7. 兼容性:好的硬盘检测工具应支持多种类型的硬盘,包括IDE、SATA、SCSI、SSD等,同时兼容各种操作系统,如Windows、Mac OS和Linux。 8. 用户界面:直观易用的用户界面使用户能轻松理解检测结果和操作步骤,这对于...
文档强调了其版权所有属于保定市飞凌嵌入式技术有限公司,未经书面许可,不得以任何形式复制、传播、转载手册的任何部分。 #### 五、更新记录 文档V1.1版本主要更新内容包括: 1. **支持AD3812模块的3G上网功能:...
模块应用了OpenCPU技术,这可能意味着该模块内部具有一个开放的操作系统(例如Linux),能够在标准的CPU环境下执行用户编写的程序。OpenCPU概念下,用户可以利用模块提供的编程接口(APIs)定制程序,并在设备上运行...
MySQL的安装 27 2.1 MYSQL系统的安装布局 28 2.1.1 二进制安装 28...系统服务 29 2.2.3 在Linux下安装一个RPM分发 31 2.2.4 在Linux下安装二进制分发 31 2.2.5 在Linux下安装源代码分发 32 2.2.6 ...
MySQL的安装 27 2.1 MYSQL系统的安装布局 28 2.1.1 二进制安装 28...系统服务 29 2.2.3 在Linux下安装一个RPM分发 31 2.2.4 在Linux下安装二进制分发 31 2.2.5 在Linux下安装源代码分发 32 2.2.6 ...