在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代表系統時間,即用硬件時鐘同步系統時鐘