时间

时间的分类
  • 系统时间 (即软件时间)与硬件时间分别维护,保存了:时间、时区和夏时令设置,linux内核保存为自UTC时间1970年1月1日经过的秒数。初始系统的时钟从硬件时间计算得来,计算时会考虑/etc/dajtime的设置,系统启动之后,系统时钟与硬件时钟独立运行,linux通过时钟中断计数维护系统时钟;
  • 硬件时间 (即实时时钟RTC或CMOS时钟),仅能保存年、月、日、时、分、秒这些时间数值,无法保存时间标准(UTC或localtime)
  • UTC时间 UTC是指的是协调世界时,又称为世界统一时间、国际协调时间,由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称为UTC,中国大陆的时间比UTC快8小时,写作UTC+8
  • RTC时间 (Real_Time Clock)实时时钟的缩写是RTC,RTC是集成电路,通常称为时钟芯片,目前实时的时钟芯片大多采用精度较高的晶体震荡器作为时钟源
  • localtime 本地时间,CST(China Standard Time)
时间相关命令
  • 读取时间 timedatectl / date / hwclock --show
[root@localhost rpmbuild]# timedatectl  (查看所有的时间)
               Local time: 五 2021-03-12 16:02:18 CST
           Universal time: 五 2021-03-12 08:02:18 UTC
                 RTC time: 五 2021-03-12 16:02:19
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: inactive
          RTC in local TZ: yes
          
[root@localhost rpmbuild]# date  (查看系统时间)
2021年 03月 12日 星期五 16:07:02 CST

[root@localhost rpmbuild]# hwclock --show  (查看硬件时间)
2021-03-12 16:24:59.962795+08:00


  • 设置时间
date -s  hwclock -w
[root@localhost rpmbuild]# date -s  "2021-03-12 16:15:00"
2021年 03月 12日 星期五 16:15:00 CST
这种方法仅是设置系统时间,并没有将时间同步到硬件中,需要执行hwclock -w,将系统时间同步到硬件时间

hwclock --set --date 设置硬件时间
[root@localhost rpmbuild]# hwclock --set --date "2021-03-13 18:11:11"
[root@localhost rpmbuild]# hwclock --show
2021-03-13 18:11:18.587175+08:00

hwclock -s  / hwclock --hctosys  系统时间同步硬件时间  
[root@localhost rpmbuild]# hwclock  -s
[root@localhost rpmbuild]# date
2021年 03月 13日 星期六 18:13:00 CST

hwclock -w /hwclock --systohc  硬件时间同步系统时间

timedatectl  set-time "2021-03-12 16:33:00"  (这种设置时间的方法自动会将系统时间同步到硬件)
[root@localhost rpmbuild]# timedatectl  set-time "2021-03-12 16:33:00"
[root@localhost rpmbuild]# timedatectl
               Local time: 五 2021-03-12 16:33:04 CST
           Universal time: 五 2021-03-12 08:33:04 UTC
                 RTC time: 五 2021-03-12 16:33:05
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no

  • 同步网络时间
systemctl restart ntpd
ntpdate -dv ntp.api.bz (同步时间服务器,NTP服务器(上海) :ntp.api.bz)
可以获取ntp时间,但没有自动设置系统时间,是否要手动修改???

  • 设置时区
查看时区:
1.timedatectl 中“Time zone”查看的就是目前系统所用的时区
2.date -R ,可以看到目前系统的时间与UTC时间的偏移值
[root@localhost rpmbuild]# date  -R 
Fri, 12 Mar 2021 16:58:47 +0800
3.ls -l /etc/localtime ,可以查看到目前使用的时区的配置文件
[root@localhost rpmbuild]# ls -l /etc/localtime 
lrwxrwxrwx 1 root root 35  8月 15  2020 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

设置时区:
1.tzselect  按提示选择你想要使用的时区
根据提示将结果写到~/.bash_profile中,并执行 Africa/Abidjan'; export TZ
执行date -R ,发现时间发生了改变,但是timedatectl的localtime却没有改变,时区也没有发生改变,/etc/localtime也没有发生改变;所以这种方式并没有真正的设置
时区,但是可以常看你想要设置的时区与UTC的偏移值,然后手动创建/etc/localtime;
2.
[root@localhost ~]# rm /etc/localtime
rm:是否删除符号链接 '/etc/localtime'?y
[root@localhost ~]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
修改时区成功!!
3.使用timedatectl命令设置时区
查看系统所有的时区:
[root@localhost ~]# timedatectl list-timezones |grep Africa/Abidjan
Africa/Abidjan
设置系统的时区:
timedatectl set-timezone  Africa/Abidjan
查看/etc/localtime
[root@localhost ~]# ls -l /etc/localtime
lrwxrwxrwx 1 root root 36  3月 12 09:37 /etc/localtime -> ../usr/share/zoneinfo/Africa/Abidjan
修改成功!!!!

修改时区,/etc/localtime是根本,建议设置时间或时区最好使用timedatectl命令

  • 设置时间标准
    时间标准有localtime和UTC,时间的标准由操作系统来设定,windows默认使用localtime,macos默认使用utc而unix系列的操作系统两种都有
    使用linux时最好将硬件时钟设置为UTC标准
可以通过timedatectl status 查看目前系统的时间标准
timedatectl set-local-rtc 1 可以将硬件时间设置为localtime
timedatectl set-local-rtc 0 可以将硬件时间设置为UTC时间

上述命令会自动生成/etc/adjtime,如果不存在/etc/adjtime,sysetmd会假定硬件时间按UTC设置。!!!

/etc/adjtime中也可以看出硬件时间的设置是localtime还是UTC
[root@localhost ~]# timedatectl set-local-rtc 0
[root@localhost ~]# cat /etc/adjtime 
0.000000 1615540664 0.000000
1615540664
UTC
最能代表“真实时间”的是国际原子时钟),所有的时钟都是有误差的。电子时钟的时间是不准的,但是一般有固定的偏移。这种于基值的差称为“time skew”或“时间偏移”。用 hwclock 设置硬件时间时,会计算每天偏移的秒数。偏移值是原硬件时间与新设置硬件时间的差,并且考虑上次硬件时间设置时的偏移。新的偏移值会在设置时钟时写到文件 /etc/adjtime 。

注意: 如果硬件时间值与原值的差小于 24 小时,偏移量不会重新计算,因为时间过短,无法精确设置偏移。

如果硬件时钟总是过快或过慢,可能是计算了错误的偏移值。硬件时钟设置错误或者时间标准与其他操作系统不一致导致。删除文件 /etc/adjtime 可以删除偏移值,然后设置正确的硬件时钟和系统时钟,并检查时间标准是不是设置正确。

注意: 使用 Systemd 时,要使用 /etc/adjtime中的 drift 值(即无法或不想使用 NTP 时); 需要每次调用 hwclock --adjust命令,可以通过 cron 任务实现。
提高系统时间精度的方法有:
NTP 可以通过网络时间协议同步 Linux 系统的时间。NTP 也会修正中断频率和每秒滴答数以减少时间偏移。并且每隔 11 分钟同步一次硬件时钟。

建议硬件时间最好使用UTC,否则在启动或关机时时间会发生变化

系统同步时间的流程
时间相关函数
参考链接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值