文章目录
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的时间
- 查看时间和日期
命令 : "date"
2.设置时间和日期
例如:将系统日期设定成2009年11月3日的命令
命令 : "date -s 11/03/2009"
将系统时间设定成下午5点55分55秒的命令
命令 : "date -s 17:55:55"
- 将当前时间和日期写入BIOS,避免重启后失效
命令 : "hwclock -w"
注意:
date 不加参数可以直接看到当前日期时间
cal 不加参数可以直接看到本月月历
5. 硬件时间和系统时间的 相互同步
hw代表硬件时间,sys代表系统时间
硬件时钟与系统时钟同步:
#hwclock --hctosys
或者
# clock --hctosys hc
系统时钟和硬件时钟同步:
#hwclock --systohc
或者
#clock --systohc