Bootstrap

Linux 操作系统——查看/修改系统时区、时间、本地时间修改为UTC

1.背景描述

最近一个项目日期采用java8的LocalDate 和 LocalDateTime ,在本地windows 下运行,日期没有问题,但是当部署到linux 系统上时,相差8 小时,第一时间想到时linux 服务器日期和时间设置的问题。果断登陆linux 服务器查看。

2.知识储备

  • GMT(Greenwich Mean Time,格林威治标准时间):
    是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。
  • UTC(Universal Time/Temps Cordonné 世界标准时间)
  • CST(Central Standard Time 國家標準時間,一說中原標準時間); 中国标准时间(China
    Standard Time) GMT + 8 = UTC + 8 = CST
  • linux系统时钟有两个,一个是硬件时钟,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时钟,是linux系统Kernel时间。当Linux启动时,系统Kernel会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。有时我们会发现系统时钟和硬件时钟不一致,因此需要执行时间同步
  • java程序获取的时间都是GMT / UTC 时间,而系统是北京时间,应该是GMT/UTC+8,刚好相差8小时

Linux下查看/修改系统时区、时间
https://blog.51cto.com/royfans/5612595

3.解决步骤

1. 查看当前时区

date

在这里插入图片描述

date -R

在这里插入图片描述

timedatectl

在这里插入图片描述

2.修改设置Linux服务器时区

方法 A
命令 : "tzselect"

方法 B 仅限于RedHat Linux 和 CentOS
命令 : "timeconfig"
方法 C 适用于Debian
命令 : "dpkg-reconfigure tzdata"

3.复制相应的时区文件,替换系统时区文件;或者创建链接文件

方法A: 复制

cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

例如:在设置中国时区使用亚洲/上海(+8)

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

方法B(推荐): 创建软连接

# 改为 CST shanghai 时间
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 改为UTC 时间,此方法可以解决linux 上 java 日期相差 8 小时问题
ln -sf /usr/share/zoneinfo/UTC /etc/localtime

方法C: 使用 timedatectl

timedatectl set-timezone Asia/Shanghai

4. 查看和修改Linux的时间

  1. 查看时间和日期

命令 : "date"

2.设置时间和日期

例如:将系统日期设定成2009年11月3日的命令

命令 : "date -s 11/03/2009"

将系统时间设定成下午5点55分55秒的命令

命令 : "date -s 17:55:55"

  1. 将当前时间和日期写入BIOS,避免重启后失效

命令 : "hwclock -w"

注意:
date 不加参数可以直接看到当前日期时间
cal 不加参数可以直接看到本月月历

5. 硬件时间和系统时间的 相互同步

hw代表硬件时间,sys代表系统时间
硬件时钟与系统时钟同步:

 #hwclock --hctosys 
 或者 
 # clock --hctosys hc

系统时钟和硬件时钟同步:

#hwclock --systohc
或者
#clock --systohc 
;