在linux中与时间相关的文件有java
/etc/localtime
/etc/timezone
其中,/etc/localtime 是用来描述本机时间,而/etc/timezone 是用来描述机器所属的时区。linux
修改本机时间vim
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
在/usr/share/zoneinfo 下存放着不一样时区格式的时间文件,执行一下命令,能够讲本机时间调整至目标时区的时间格式。ide
可是!调整了时间格式,本机所属的时区是保持不变的!
修改本机时区
在linux中,有一些程序会本身计算时间,不会直接采用带有时区的本机时间格式,会根据UTC时间和本机所属的时区等code
计算出当前的时间。orm
好比jdk应用,时区为"Etc/UTC",本机时间改成北京时间,经过java代码中的new出来的时间仍是utc时间,因此必须得blog
修正本机的时区。同步
echo 'Asia/Shanghai' > /etc/timezone
例如java 程序it
vim Demo.java import java.util.Date; import java.text.SimpleDateFormat; public class Demo{ public static void main(String args[]){ System.out.println("This is a test"); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(df.format(new Date())); } } javac Demo.java
java Demo 显示时间是从/etc/timezone 时区时间获取;form
在data -R 查看是+0800,可是查看的时间就是少12个小时,须要修改 /etc/timezone
################
强行修改系统时间:
格式为 date -s "YYYY-MM-DD hh:mm:ss"
可是这样修改后,重启系统后,时间又变成修改前的时间。这是由于咱们只修改了系统时间
而没有修改硬件时间。咱们通常看到的时间为系统时间,而硬件时间指的是主板上CMOS的
时间,这两个时间并不老是同步的,通常间隔大约11分钟会同步一次。
当系统启动会从CMOS上读取一次时间为系统时间,然后系统时间独立。
经过hwclock --systohc 讲系统时间同步到硬件时间
全部能够经过 date -s "YYYY-MM-DD hh:mm:ss" && hwclock --systohc 来修改系统时间。
date -s "20210419 10:11:12" && hwclock --systohc
注意:对于虚机机可能重启后,系统时间仍然是主机硬件时间。注 hwclock --hctosys hc表明硬件时间,sys表明系统时间,即用硬件时钟同步系统时钟