CentOS 7 设置日期和时间
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 CST
Universal time: Fri 2018-07-20 09:46:09 UTC
RTC time: Fri 2018-07-20 09:46:09
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[root@localhost ~]# timedatectl
Local time: 本地时间,与系统设置的时区有关系,北京时间简写CST
Universal time: 协调世界时,简写为UTC
RTC time: 硬件时间,默认显示时间是UTC时间
Time zone: 当前时区
NTP enabled: 是否设置NTP服务开机启动
NTP synchronized: NTP服务是否已经同步时间
RTC in local TZ: 硬件时间是否是本地时区
DST active: 夏令时是否可用 n/a(Not applicable,不可用)
这里的NTP服务由chronyd或者ntpd提供,具体取决于安装的是哪个服务,手动改变chronyd或ntpd的状态(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 CST
Universal time: Fri 2018-07-20 09:46:09 UTC
RTC time: Fri 2018-07-20 09:46:09
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST 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将启用chronyd或ntpd服务,具体取决于安装的是哪个。
[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
常用控制项见下表
|
控制序列 |
描述 |
|---|---|
|
|
HH格式的小时(例如 |
|
|
MM格式的分钟(例如 |
|
|
SS格式的第二个(例如 |
|
|
DD格式的月份日期(例如 |
|
|
MM格式的月份(例如 |
|
|
YYYY格式的年份(例如 |
|
|
时区缩写(例如 |
|
|
YYYY-MM-DD格式的完整日期(例如 |
|
|
HH:MM:SS格式的完整时间(例如,17 :30: 24)。此选项等于 |
设置本地时间
设置本地时间为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内核维护的一个“工具”。
CentOS 7 设置日期和时间的更多相关文章
- CentOS 7 设置日期和时间 timedatectl
CentOS 7 设置日期和时间 在CentOS 6版本,时间设置有date.hwclock命令,从CentOS 7开始,使用了一个新的命令timedatectl. timedatectl [root ...
- Centos 7 修改日期和时间的命令
timedatectl set-ntp no //关闭时间动态更新timedatectl set-time "YYYY-MM-DD HH:MM:SS" //设置时间和日期timed ...
- CentOS 7: 设置时区和时间
查看当前时区和时间 $ date $ ls -l /etc/localtime 查看所有可用时区 $ timedatectl list-timezones | grep Asia 设置时区 $ tim ...
- CentOS 7 设置时区、日期和时间
CentOS 7 设置时区.日期和时间 changhr2013关注 2019.04.19 01:33:09字数 307阅读 139 在 CentOS 7 中,引入了一个叫 timedatectl 的设 ...
- Centos date 设置自定义时间
[1]手动修改 (1)设置日期 # date -s 20190315 (2)设置时间 # date -s 15:23:34 (3)设置日期和时间 # date -s "20190315 15 ...
- 【转】Pro Android学习笔记(十七):用户界面和控制(5):日期和时间控件
目录(?)[-] DatePicker和TimePicker控件 DigitalClock和AnalogClock控件 DatePicker和TimePicker控件 使用DatePicker和Tim ...
- matlab中datest() 将日期和时间转换为字符串格式
来源:https://ww2.mathworks.cn/help/matlab/ref/datestr.html?searchHighlight=datestr&s_tid=doc_srcht ...
- CentOS下date命令 - 显示和设置系统日期与时间
显示系统日期 要显示系统日期,只要输入: $ date Thu Dec 5 22:55:41 WIB 2013 格式化显示日期 日期有很多格式.如果你不喜欢默认的格式,你可以换一种格式.你可能会想&q ...
- 解决CentOS 6环境时区、日期、时间同步方法
有些时候我们在选择的VPS服务商提供的VPS主机方案安装系统.安装建站环境之后就直接上马网站,但是我们会有发现发布的文章或者有些时候设置的自动执行脚本时间与我们实际的时间不符合.甚至有些程序是需要与本 ...
随机推荐
- laravel中的模型关联之(一对一)
一对一 一对一的关联关系就相当于,赞和文章之间的关系,一个用户只能赞一次一个文章,只能和文章发生一次关系, 用户和赞的文章是唯一的一份,这里举得是判断用户是否赞过某个文章 一个参数都是你要获取的模型, ...
- Windows下Memcached的安装配置方法
1.将第一个包解压放某个盘下面,比如在c:\memcached. 2.在终端(也即cmd命令界面)下输入 'c:\memcached\memcached.exe -d install' 安装. 3.再 ...
- 665. Non-decreasing Array只允许修改一位数的非递减数组
[抄题]: Given an array with n integers, your task is to check if it could become non-decreasing by mod ...
- 面试题:各大公司Java后端开发面试题总结 已看1 背1 有用 链接有必要看看
ThreadLocal(线程变量副本) --整理 Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个 ...
- c语言学习笔记 多级else if 和switch case有什么区别
; ) { dosth(); } ) { dosth2(); } else if(opion==) { dosth3(); } else dosth4(); 如果给option的一个值是2的话,那么程 ...
- [GO]冒泡排序的原理和代码实现
冒泡排序的原理:对于一个数组里所有的元素进行两两比较,发生大于则变换数组下标则为升序排序,发生小于则变换数据下标的则为降序排序 比如给定的数组为[1, -2, 3, -4],对于我们的需求,两两比较后 ...
- App测试从入门到精通之交叉事件测试
交叉事件测试又叫事件或者叫冲突测试.对于正在运行的应用,若进入短信,电话等其他软件响应的情况,不会影响所测试应用,且会保证应用都能正确运行.下面我来看一下关于交叉测试中,我们测试人员需要考虑的一些测试 ...
- location.reload() 和 location.replace()的区别和应用
首先介绍两个方法的语法: reload 方法,该方法强迫浏览器刷新当前页面.语法: location.reload([bForceGet]) 参数: bForceGet, 可选参数, 默认为 fals ...
- MVC复杂类型的模型绑定
1,属性为引用类型(非集合,非数组) //模型1 public class Contact { public string Name { get; set; } public string Phone ...
- POJ - 1328 Radar Installation(贪心区间选点+小学平面几何)
Input The input consists of several test cases. The first line of each case contains two integers n ...