如何透過三個步驟自訂區域設定的日期格式

如何透過三個步驟自訂區域設定的日期格式

現在在我的系統上預設date輸出:

$ date
Fri 29 Jan 22:04:26 GMT 2016

但是,如果我嘗試將這種格式的日期提供回其中,date則會導致“無效日期”:

$ date -d "$(date)"
date: invalid date ‘Fri 29 Jan 22:06:14 GMT 2016’

我意識到我可以手動選擇一種date可以理解的格式:

$ date -d "@$(date +%s)"
Fri 29 Jan 22:08:03 GMT 2016

但我感興趣的是為什麼它會輸出一種它不接受的格式。

答案1

我花了大約兩個小時尋找這個困擾我多年的答案,我終於找到了!

預設以date目前區域設定格式輸出日期,例如en_GB.UTF-8en_AU.UTF-8de_DE.UTF-8

您的預設區域設定看起來與我的類似,並以以下格式顯示日期:

date_fmt "%a %e %b %H:%M:%S %Z %Y"

不幸的是,這是日期命令無法理解的少數格式之一。然而,如果可以理解非常相似的格式

date_fmt "%a %e %b %Y %H:%M:%S %Z"

「2016 年 1 月 29 日星期五 22:04:26 GMT」有效

“2016 年 1 月 29 日星期五 22:04:26 GMT” 沒有

為什麼非常常用的語言環境的 en_GB.UTF-8 和 en_AU.UTF-8 使用無法讀取的格式date我不知道,但很容易調整它,這樣它就不會再打擾你了,至少不會直到您重新安裝系統或您的定義被過度熱心的更新覆蓋>:-(

如何透過三個步驟自訂區域設定的日期格式

我找到了以下信息這裡:

1. 檢查您正在使用的區域設置

首先檢查您的系統所使用的區域設定的時間和日期格式

$ locale
LANG=en_AU.UTF-8
LANGUAGE=en_AU
LC_CTYPE="en_AU.UTF-8"
LC_NUMERIC=en_AU.UTF-8
LC_TIME=en_AU.UTF-8
LC_COLLATE="en_AU.UTF-8"
LC_MONETARY=en_AU.UTF-8
LC_MESSAGES="en_AU.UTF-8"
LC_PAPER=en_AU.UTF-8
LC_NAME=en_AU.UTF-8
LC_ADDRESS=en_AU.UTF-8
LC_TELEPHONE=en_AU.UTF-8
LC_MEASUREMENT=en_AU.UTF-8
LC_IDENTIFICATION=en_AU.UTF-8
LC_ALL=

請注意LC_TIME=入口。我的是英國澳洲人:en_AU.UTF-8你的可能是 en_GB_UTF-8

2. 編輯語言環境定義

打開終端並編輯適當的區域設定定義

$ sudo nano /usr/share/i18n/locales/{LC_Time}

例如

$ sudo nano /usr/share/i18n/locales/en_AU

向下滾動到 LC_TIME 部分,這是我的:

LC_TIME
abday       "Sun";"Mon";"Tue";"Wed";"Thu";"Fri";"Sat"
day         "Sunday";/
            "Monday";/
            "Tuesday";/
            "Wednesday";/
            "Thursday";/
            "Friday";/
            "Saturday"
abmon       "Jan";"Feb";/
            "Mar";"Apr";/
            "May";"Jun";/
            "Jul";"Aug";/
            "Sep";"Oct";/
            "Nov";"Dec"
mon         "January";/
            "February";/
            "March";/
            "April";/
            "May";/
            "June";/
            "July";/
            "August";/
            "September";/
            "October";/
            "November";/
            "December"
d_t_fmt     "%a %d %b %Y %T %Z"
d_fmt       "%d//%m//%y"
t_fmt       "%T"
am_pm       "AM";"PM"
t_fmt_ampm  "%I:%M:%S %p"
date_fmt    "%a %e %b %Y %H:%M:%S %Z"
week 7;19971130;1
END LC_TIME

您需要更改的只是date_fmt條目

我將我的從: 更改 date_fmt "%a %e %b %H:%M:%S %Z %Y"date_fmt "%a %e %b %Y %H:%M:%S %Z"

儲存檔案並退出編輯器

3 重新生成您的語言環境

您可以使用以下命令重新編譯區域設定定義檔:

$ sudo locale-gen

就是這樣!現在該date命令應該預設以它本身可以接受作為輸入的格式提供輸出

$ date -d "$(date)"
Mon 17 Aug 2020 17:58:37 AWST

相關內容