在linux中与时间相关的文件有
/etc/localtime
/etc/timezone
其中,/etc/localtime 是用来描述本机时间,而/etc/timezone 是用来描述机器所属的时区。
修改本机时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
在/usr/share/zoneinfo 下存放着不同时区格式的时间文件,执行一下命令,可以讲本机时间调整至目标时区的时间格式。
但是!调整了时间格式,本机所属的时区是保持不变的!
修改本机时区
在linux中,有一些程序会自己计算时间,不会直接采用带有时区的本机时间格式,会根据UTC时间和本机所属的时区等
计算出当前的时间。
比如jdk应用,时区为"Etc/UTC",本机时间改为北京时间,通过java代码中的new出来的时间还是utc时间,所以必须得
修正本机的时区。
echo 'Asia/Shanghai' > /etc/timezone
例如java 程序
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 时区时间获取;
在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代表系统时间,即用硬件时钟同步系统时钟