如何通过三个步骤自定义语言环境的日期格式

如何通过三个步骤自定义语言环境的日期格式

我的系统现在默认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 命令无法理解的少数格式之一。但是,如果可以理解非常相似的格式

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

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

“星期五 1 月 29 日 22:04:26 GMT 2016”不

为什么非常常用的语言环境 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

相关内容