Skip to content

[Linux] 如何更換 "date" 指令的顯示語言

Last Updated on 2022-09-27 by Clay

今天我在 Linux 系統上使用 date 指令查看當前日期時間時,我得到了以下的中文顯示結果:

西元2022年09月27日 (週二) 19時41分14秒 CST

但是我的系統應該是安裝全英文的啊?難道是我當初時間直接設定在了台北、所以導致日期的顯示完全跟著當初設定的地區走了?

身為一位有著隱性強迫症的工程師,我開始研究該怎麼去更改的顯示日期語言的問題。


顯示當前系統設定的日期時間格式

首先,我們可以透過 LC_TIME 的環境變數來找到當前所使用的日期時間格式。LC_XXX 有很多種,像是 LC_CTYPE 就是處理字元格式、LC_NUMERIC 就是顯示數字的格式......

其中 LC_ALL 可以一口氣設置全部的格式為某個地區,但是那太粗略了,我比較喜歡精確地去設定我要的配置。

而我們可以使用以下指令:

echo $LC_TIME


Output:

zh_TW.utf8


以此來找到我們當前所顯示的時間格式設定。

當然,既然這是由環境變數所決定的,我們當然可以直接修改這個環境變數成我們要的。不過要注意的是,如果你在終端機直接進行更改,那麼這個設定會生效直到你退出你的終端機。在下次重新開啟終端機的時候,你的日期時間格式仍然會維持原本的系統預設值。

或許你可以直接寫入 ~/.bashrc 設定檔中,這其實也是一個做法。不過我過去曾經有過在設定檔中做了太多的設定,導致終端機開啟時會很明顯地感受到以秒為單位的延遲...... 所以如果可以,我更傾向於直接修改系統的預設值,而非把所有的設定都寫在 .bashrc 設定檔。(前提是你不是在多人共用的伺服器中去修改別人的設定



顯示可以使用的系統格式

locale -a


Output:

C
C.utf8
POSIX
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IL
en_IL.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
lzh_TW
lzh_TW.utf8
zh_HK.utf8
zh_TW.utf8




把日期時間設定成不同的格式

你可以編輯 /etc/default/locale 檔案。(這份檔案需要管理員權限才可以編輯

sudo vim /etc/default/locale


Output:

LANG=C.UTF-8
LANGUAGE=
LC_CTYPE=C.UTF-8
LC_NUMERIC=lzh_TW
LC_TIME=zh_TW.utf8
LC_COLLATE="C.UTF-8"
LC_MONETARY=lzh_TW
LC_MESSAGES="C.UTF-8"
LC_PAPER=lzh_TW
LC_NAME=lzh_TW
LC_ADDRESS=lzh_TW
LC_TELEPHONE=lzh_TW
LC_MEASUREMENT=lzh_TW
LC_IDENTIFICATION=lzh_TW
LC_ALL=


就如同上方所述,你可以直接將 LC_TIME 直接修改成 en_US.utf8

或者是,你可以使用 localectl 指令來直接修改(此方法會在下一次你開啟終端機時生效):

sudo localectl set-locale LC_TIME=en_US.utf8


這些設定都是會永久生效的。在經過修改了以後,我顯示的日期時間格式大致上如下:

date


Output:

Tue Sep 27 08:04:29 PM CST 2022


完美符合我對系統語言的要求。


References


Read More

看到過去寫過的日期時間紀錄...... 不由得感慨人類是一種永遠追逐於時間的生物啊!(我到底在說什麼)

Tags:

Leave a Reply