`

linux下的系统时间/硬件时间解释(转载)

阅读更多

一、首先要弄清几个概念:

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/

 

分享到:
评论

相关推荐

    转载linuxC经典面试题十四.pdf

    【知识点详解】 1. 关闭Linux系统:在给出的题目中,`halt`命令用于关闭Linux系统而...以上知识点详细解释了Linux系统管理、文件操作、网络服务、文本编辑和命令行工具的使用,这些都是Linux C编程面试中常见的问题。

    linux内核下载,【转载】菜鸟编译Linux内核[借鉴].pdf

    编译内核是一个技术性很强的过程,需要对Linux系统有一定了解。对于新手来说,这是一次学习Linux内部机制的好机会,但也要注意避免可能导致系统无法启动的错误。如果不确定某些配置选项,建议保持默认设置,或查阅...

    linux 打so库

    动态链接库(so库)是Linux系统下的一种动态链接共享库格式,常用于Linux系统中应用程序与共享库的链接。打包so库通常意味着对多个目标文件(.o文件)或已有库文件进行组合,生成单个的共享库文件(.so文件),以供...

    Linux101 Hacks 2rd

    例如,`sudo hwclock --systohc`将系统时间同步到硬件时钟。 **Hack 35. Display Date and Time in a Specific Format** `date`命令支持多种格式化选项。例如,`date +"%Y-%m-%d %H:%M:%S"`将日期和时间格式化为...

    服务器系统平台技术规格书收集.pdf

    * 主机一和主机二为并行存取操作数据库方式,并结合硬件HA系统,实现并行计算,提高转载、查询、备份、维护的时间性能,突破主机内存和系统体系结构 * 主机二采用分区技术,划分一个分区作为逻辑主机三,提供应用...

    OK210_硬件手册

    - **OK210开发板简介**:采用ARM Cortex-A8处理器,支持Linux/Android操作系统。 - **应用领域**:广泛应用于工业控制、智能终端、物联网等领域。 - **ARMCortex-A8介绍**: - **架构特性**:高性能、低功耗,支持...

    ARM入门最好的文章转载一位资身工程师的入门心得

    硬件部分,ARM处理器的模块化设计简化了开发流程,而软件部分则主要涉及操作系统,如Linux。在职业发展中,ARM开发工程师的工作往往侧重于软件开发,如驱动程序编写和嵌入式系统集成。因此,对于初学者来说,熟悉ARM...

    kibana-6.3.2-amd64.deb

    一方面可以通过升级硬件来完成系统扩展,称为垂直或向上扩展(Vertical Scale/Scaling Up)。 另一方面,增加更多的服务器来完成系统扩展,称为水平扩展或者向外扩展(Horizontal Scale/Scaling Out)。尽管ES能够...

    内核编译配置选项简介

    以上配置选项是Linux内核编译过程中非常重要的一部分,合理选择这些选项不仅可以提高内核的性能,还能满足特定硬件平台的需求。开发者可以根据自己的实际需求进行选择和调整,以达到最佳的效果。

    qt4.8.5平台移植 imx6q

    - 飞思卡尔(Freescale,现为NXP半导体的一部分)提供了一站式嵌入式方案,其中包含高效能、低功耗、快速启动以及长生命周期的Linux系统和通用连接的支持。 - 在开发嵌入式产品时,了解目标硬件平台的特性是至关...

    硬盘检测工具

    7. 兼容性:好的硬盘检测工具应支持多种类型的硬盘,包括IDE、SATA、SCSI、SSD等,同时兼容各种操作系统,如Windows、Mac OS和Linux。 8. 用户界面:直观易用的用户界面使用户能轻松理解检测结果和操作步骤,这对于...

    OK335xS Android用户手册V1 1 pdf

    文档强调了其版权所有属于保定市飞凌嵌入式技术有限公司,未经书面许可,不得以任何形式复制、传播、转载手册的任何部分。 #### 五、更新记录 文档V1.1版本主要更新内容包括: 1. **支持AD3812模块的3G上网功能:...

    FIBOCOM G500 OpenCPU 编程应用设计说明_V1.0.1.pdf

    模块应用了OpenCPU技术,这可能意味着该模块内部具有一个开放的操作系统(例如Linux),能够在标准的CPU环境下执行用户编写的程序。OpenCPU概念下,用户可以利用模块提供的编程接口(APIs)定制程序,并在设备上运行...

    MYSQL培训经典教程(共两部分) 2/2

    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培训经典教程(共两部分) 1/2

    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 ...

Global site tag (gtag.js) - Google Analytics