CentOS 7 有两种类型的时间:

  • 实时时间(Real-Time Clock,RTC),通常称为硬件时间,完全独立于操作系统运行,一般是由主板上的COMS负责维护,因此在操作系统关闭后也能运行。
  • 系统时间(System Time),也称为软件时间,由Linux内核维护,其初始值基于硬件时间,一旦Linux启动并且系统时间被初始化,系统时间就完全独立于硬件时间。

CentOS 7 提供了三个命令行工具,可以用来显示和配置时间:timedatectl,date,hwclock;timedatectl是CentOS 7的新工具,可以同时管理系统时间和硬件时间,date是CentOS 6就有的工具,只能管理系统时间,一般是脚本中用于格式化输出时间,hwclock主要用于管理硬件时间。

使用timedatectl命令

CentOS 7 中以ctl结尾的命令,几乎都是systemd的一部分,timedatectl也不例外。

显示当前日期和时间

[root@localhost ~]# timedatectl Local time: Fri 2018-07-20 17:46:09 CSTUniversal time: Fri 2018-07-20 09:46:09 UTCRTC time: Fri 2018-07-20 09:46:09Time zone: Asia/Shanghai (CST, +0800)NTP enabled: yes
NTP synchronized: yesRTC in local TZ: noDST active: n/a

[root@localhost ~]# timedatectl Local time: 本地时间,与系统设置的时区有关系,北京时间简写CSTUniversal time: 协调世界时,简写为UTCRTC time: 硬件时间,默认显示时间是UTC时间Time zone: 当前时区NTP enabled: 是否设置NTP服务开机启动
NTP synchronized: NTP服务是否已经同步时间RTC in local TZ: 硬件时间是否是本地时区DST active: 夏令时是否可用 n/a(Not applicable,不可用)

这里的NTP服务由chronyd或者ntpd提供,具体取决于安装的是哪个服务,手动改变chronydntpd的状态(systemctl enable|disable设置是否开机启动,是否同步时间),不会立即同步给timedatectl。如果更改了这些它们的设置或状态,请输入以下命令立即获取它们的状态:

[root@localhost ~]# systemctl restart systemd-timedated.service 

修改本地时间

[root@localhost ~]# timedatectl set-time 12:12:12  //修改为12:12:12

该命令同时修改系统时间和硬件时钟,其结果类似于同时使用date -set(设置系统时间)加上hwclock -systohc(将系统时间写入硬件时间,-systohc同-w)命令,如果timedatectl set-time出现以下提示

Failed to set time: Automatic time synchronization is enabled

是因为启用了NTP

[root@localhost ~]# timedatectl Local time: Fri 2018-07-20 17:46:09 CSTUniversal time: Fri 2018-07-20 09:46:09 UTCRTC time: Fri 2018-07-20 09:46:09Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yesRTC in local TZ: noDST active: n/a

既然已经设置了NTP服务,也没手动设置时间的必要了,强制立即同步时间

[root@CentOS_7_4 ~]# chronyc makestep  //适用与chronyc做NTP服务,实际测试未成功,原因未知

[root@CentOS_7_4 ~]# ntpdate 210.72.145.44  //chronyc和ntpd做ntp服务都可以使用该命令

如果确实有手动设置时间的需求,timedatectl手动关闭NTP服务,或者使用date -s

[root@localhost ~]# timedatectl set-ntp false   //禁用NTP

默认情况下,系统配置硬件时间使用UTC,使硬件时间使用本地时间,请使用以下命令

[root@localhost ~]# timedatectl set-local-rtc boolean

若要配置系统以在本地时间保持时钟,请用“yes”(或者y,true,t,1)替换boolean,若要配置系统使用UTC,请用NO(或者n,false,f,0)替换boolean,默认值为no

修改本地日期

[root@localhost ~]# timedatectl set-time 2011-12-01  //设置日期为2011年12月1日

请注意,只更改日期而不指定时间将会导致时间设置为00:00:00,设置完整时间格式如下

[root@localhost ~]# timedatectl set-time "2022-10-10 11:11:11"

设置时区

列出所有时区

[root@localhost ~]# timedatectl list-timezones 

设置时区为 亚洲/上海

[root@localhost ~]# timedatectl set-timezone Asia/Shanghai 

查找亚洲时区

[root@localhost ~]# timedatectl list-timezones |grep Asia

设置时间同步

timedatectl命令还允许您使用NTP协议,启用与远程服务器的系统时钟自动同步;启用NTP将启用chronydntpd服务,具体取决于安装的是哪个。

[root@localhost ~]# timedatectl set-ntp boolean

请用“yes”(或者y,true,t,1)替换boolean,若要禁用,请用NO(或者n,false,f,0)替换boolean

如果NTP未安装服务,该命令将失败

使用date命令设置时间

date实用程序适用于所有Linux系统,并允许您显示和配置当前日期和时间,在脚本中经常使用它以自定义格式显示有关系统时钟的详细信息。与timedatectl不同的是date命令只设置系统时间,而不设置硬件时间(RTC)

[root@localhost ~]# date
Mon Jul 23 11:47:04 CST 2018

默认情况下,date命令显示本地时间,若要以UTC显示时间,请使用--utc-u命令行选项运行命令:

[root@localhost ~]# date -u
Mon Jul 23 03:48:21 UTC 2018

可以通过在命令行上提供选项来自定义显示信息的格式:

[root@localhost ~]# date +"%Y-%m-%d %H:%M"
2018-07-23 11:53

常用控制项见下表

控制序列

描述

%H

HH格式的小时(例如17

%M

MM格式的分钟(例如30

%S

SS格式的第二个(例如24

%d

DD格式的月份日期(例如16

%m

MM格式的月份(例如09

%Y

YYYY格式的年份(例如2016

%Z

时区缩写(例如CEST

%F

YYYY-MM-DD格式的完整日期(例如2016-09-16)。此选项等于%Y-%m-%d

%T

HH:MM:SS格式的完整时间(例如,17 :30: 24)。此选项等于%H:%M:%S

设置本地时间

设置本地时间为20:20:20

[root@localhost ~]# date -s 20:20:20
Mon Jul 23 20:20:20 CST 2018

设置时间为 utc 时间 20:20:20

[root@localhost ~]# date -s "12:00:00" -u
Fri Sep  7 12:00:00 UTC 2018
[root@localhost ~]# date
Fri Sep  7 20:00:02 CST 2018

UTC时间比CST快8个小时 ,也就是说设置时间为UTC 12:00:00等同于设置时间为CST 20:00:00

设置本地日期

[root@localhost ~]# date -s 2012-12-12
Wed Dec 12 00:00:00 CST 2012

设置完整日期

[root@localhost ~]# date -s "2012-12-12 12:12:12"
Wed Dec 12 12:12:12 CST 2012

使用hwclock命令

hwclock是用于访问硬件时钟的实用程序,硬件时钟存储的值为:年、月、日、小时、分钟和秒。不能存储时间标准、本地时间或协调世界时(UTC),也不能设置夏令时(DST)。hwclock实用程序将其设置保存在/etc/adjtime文件中,该文件是使用您所做的第一个更改创建的,例如,当您手动设置时间或将硬件时钟与系统时间同步时。

在Red Hat Enterprise Linux 6中,hwclock命令在每次系统关闭或重新启动时自动运行,但它不在Red Hat Enterprise Linux 7中。当系统时钟通过网络时间协议(NTP)或精确时间协议(PTP)同步时),内核每11分钟自动将硬件时钟与系统时钟同步。

显示当前硬件时间

[root@localhost ~]# hwclock
Wed 12 Dec 2012 12:07:24 AM CST  -0.672664 seconds

设置硬件时间

如果要将日期和时间设置为特定值(例如,“2016年10月21日21:17”),请root按以下格式运行命令:

[root@localhost ~]# hwclock --set --date "21 Oct 2016 21:17"

以UTC时间 hwclock --set --date "21 Oct 2016 21:17" 设置硬件时间

[root@localhost ~]# hwclock --set --date "21 Oct 2016 21:17" -u

我在实际验证中,这里的 -u参数并没有起到作用

同步时间和日期

  • 设置硬件时间为系统时间
[root@localhost ~]# hwclock -w

  • 设置系统时间为硬件时间
[root@localhost ~]# hwclock -s

关于CentOS时间的杂谈

系统时间原理

系统时间由Linux内核维护,其初始值基于硬件时间,一旦Linux启动并且系统时间被初始化,系统时钟就完全独立于硬件时间。这也是为什么date修改系统时间后要hwclock -w,将系统时间同步给硬件时间,如果不同步,重启操作系统,系统时间将再次基于硬件时间初始化,这也就失去了修改系统时间的意义。timedatectl set-time 是同时设置系统时间和硬件时间。

要验证这个原理也非常简单,在Linux关机后,进入BIOS修改硬件时间,再开机查看Linux的系统时间,不出意外此时系统时间应会出现相应变化,做这个测试建议把杂谈看完后再做,不然会有一些困惑。

系统时间误差

Linux内核初始化系统时间后,只要不关机或做特殊设置,Linux的系统时间就一直由Linux内核维护,也正是因为这个原因Linux运行久了,会出现系统时间和硬件时间偏差(一个是靠Linux内核维护,一个是靠硬件维护),一般是几秒钟左右。因此需要设置定时任务,将硬件时间同步至系统时间,避免系统重启后,系统时间出现偏差。

对于一些集群而言,则需要设置NTP时间同步,保证系统时间的准确性,详细的设置NTP时间同步后续文章再写。

本地时间

系统时间、硬件时间始终是协调世界时(UTC),Linux会根据需要在应用程序中将系统时间转换为本地时间。比如直接执行date,是输出本地时间;此时date就是根据当前时区设置将系统时间换算为本地时间输出;如果修改时区后,再执行date,date会根据修改后的时区用系统时间计算出修改后的本地时间。

这也是很多命令-u的参数的意义,不过这一点倒没必要过于区分,比如大家一般都会认为系统时间就是本地时间,如果因为时区设置问题,导致执行date输出时间不是所处时区的时间的这种情况,大家都是说系统时间时区未正确设置。

实际上系统时间和硬件时间都是UTC时间运行,只不过大家都平时都没有去关注date、hwclock的-u,--utc项的意义,但那种通用的说法也不会影响平时使用。

夏令时

自1992年起,我国就没有再使用夏令时,系统时间也就不必设置开启夏令时。前面说到系统时间是根据硬件时间计算出来的,本地时间是当前时区的实际时间,考虑到夏令时(DST),硬件时钟可以使用UTC或本地时间,一般建议使用UTC。夏令时这部分内容简单了解一下就可以了,毕竟我国不用夏令时,全部关闭就可以了。

综述:根据这些杂谈,应该能够理解为什么hwclock -w后,进入BIOS查看硬件时间和系统时间和硬件时间刚好相差8个小时。因为真正的硬件时间是没有时区的概念,为了通用性,Linux默认是将硬件时间当作为UTC时间(当然这个可以更改设置),而UTC时间和你经常设置的北京时间就是恰好相差了8小时,同时也解释了类似date -u的意义。

看了杂谈可能会有点逻辑混乱,实际操作时还是按照平常的理解就可以了,毕竟时间这一块没那么复杂,只要设置对了时区,时间可以了,像timedatectl set-time、hwclock -w的时候需要考虑那么多,Linux会自动将本地时间计算为UTC时间记录到硬件时间上。

小知识

通常,英文文档中的time译作时间,也就是我们平时说的几点几分;date的译作日期,也就是我们平时说的几月几日;clock译作时钟,可以是硬件,也可以是一些工具,比如是real-time clock (RTC),准确的翻译应该是硬件时钟,是个硬件,系统时钟(system clock),Linux内核维护的一个“工具”。

转载于:https://www.cnblogs.com/yogurtwu/p/9343213.html

CentOS 7 设置时间和日期相关推荐

  1. linux设置时间和日期,Linux修改日期和时间

    Linux主机用户可以使用以下命令修改日期和时间(适合centos debian 等各种linux版本) 一.自定义时间日期 1.修改日期[root@Cloud12347 ~]# date -s 01 ...

  2. CentOS 7的时间设置

    Linux下使用timedatectl命令时间时区操作详解 timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具,它作为systemd系 ...

  3. linux设置时间为24小时制,设置时区

    1. 查看系统时间 [root@localhost.localdomain ~]#date Thu Feb 4 14:24:18 CST 2010 时区是CST,为了彻底弄明白GMT,UTC,CST, ...

  4. linux系统时钟使用utc,如何设置时间,时区和同步系统时钟使用timedatectl命令

    该timedatectl命令是RHEL / CentOS 7和Fedora 21+根据发行,这是作为systemd系统和服务经理,用于基于sysvinit的后台程序的Linux发行版使用旧的传统dat ...

  5. systemd 开机时间_使用systemd控制您的计算机时间和日期

    systemd 开机时间 大多数人都在关注时间. 我们及时起床执行早晨的礼节并上下班(如今,对于我们中的许多人来说这是短途旅行),休息一下午餐,在项目截止日期之前,庆祝生日和假期,乘飞机等等等等. . ...

  6. 在java中原始时间_Java 日期时间

    Java 日期时间 java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二 ...

  7. Java中的时间和日期(上)

    自从JDK 1.0开始,Java就提供了Date来处理时间和日期,作为老古董自然有很多东西是过时的.然后出现了Calendar来解决了很多问题,但是Calendar使用比较复杂,并且有些反人类的地方. ...

  8. java final date_Java中的时间和日期(上)

    自从JDK 1.0开始,Java就提供了Date来处理时间和日期,作为老古董自然有很多东西是过时的.然后出现了Calendar来解决了很多问题,但是Calendar使用比较复杂,并且有些反人类的地方. ...

  9. 时间java_Java 日期时间

    Java 日期时间 java.util包提供了Date类来封装当前的日期和时间. Date类提供两个构造函数来实例化Date对象. 第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二 ...

最新文章

  1. 产品设计体会(3000)项目与文档,系列说明
  2. java 设计原则_【无尽的编程之路】(java)-设计模式六大原则
  3. 实验一:使用ADO.NET方式读数据
  4. C语言的词法分析在长度规则方面采用的是什么策略?
  5. HDU 3954 Level up(线段树)
  6. visio 程序设计流程图合符号含义
  7. mysql 视图更欣赏失败总结
  8. 通过Java,Spring Boot应用程序将Gmail用作SMTP服务器
  9. SVN Could not open the requested SVN filesystem解决办法
  10. MySQL 排序、分页查询、聚合查询
  11. oracle 拉文件进ubuntu,ubuntu 18-20 安装oracle java 打开jnlp文件
  12. Xen Documentation - Hypercall Interfaces
  13. 从世界杯看德国,再看国内
  14. POJ NOI MATH-7829 神奇序列求和
  15. Python入门学习—列表(FishC)
  16. 多功能智慧(灯杆)路灯项目建设背景及现实的意义主要体现在哪几个方面?
  17. Collecting stars
  18. ios微信支付失败 php,iOS微信支付的那些坑
  19. 用CD怎么装linux系统,CDLinux怎么安装使用,CDLinux教程解析
  20. 今天不务正业的分析下昨天雷总新发布的小米12旗舰机

热门文章

  1. android蓝牙室内定位,基于蓝牙的室内定位系统设计与实现
  2. DarkSiders
  3. 计算机网络在铁路信号中的应用,网络科技在铁道信号的运用
  4. 绿盟科技网络安全威胁周报2017.01 请关注MatrixSSL堆缓冲区溢出漏洞CVE-2016-6890
  5. 芯片的开发板和评估板的区别
  6. 重拾TypeScript-21 类中使用泛型
  7. Excel 2007从入门到精通视频教程
  8. 一周自学动态网站设计
  9. 学生机器人编程用什么语言
  10. 编程字体Source Code Pro 安装