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
- https://askubuntu.com/questions/918482/how-to-change-time-and-date-language-to-english
- https://stackoverflow.com/questions/12896509/forcing-date-to-use-a-locale-other-than-the-machine-default
Read More
- [JavaScript] 如何比較與加減 Date() 的時間
- [JQuery] 使用 Datepicker 部件來顯示日期選擇器
- [Flutter] Dart 語言中的 DateTime 使用筆記
- [Python] 如何使用 datetime 模組來處理日期
看到過去寫過的日期時間紀錄…… 不由得感慨人類是一種永遠追逐於時間的生物啊!(我到底在說什麼)