如何找到按照我想要的方式格式化日期和时间的语言环境?

sto*_*343 6 linux date locale

我的问题看起来应该很简单,但我很惊讶我找不到答案。

我住在加拿大,所以 en_CA.UTF8 或 en_US.UTF8 是最合适的语言环境,但是我真的不喜欢它们的日期/时间格式。我同意 xkcd ( https://xkcd.com/1179/ ) 有一种格式化日期的方法:yyyy-mm-dd。我什至已经习惯了使用 24 小时制计时。

所以这对我来说是一场彻底的灾难,格式为 en_US.UTF8:“Sat 27 Jan 2018 05:20:38 PM EST”

我确定必须是使用以下变体的语言环境

%Y-%间 - %d%H:%M:%S%Z

适用于 d_fmt、d_t_fmt、date_fmt 等,但我找不到哪些语言环境使用哪些格式的参考。

我见过这个问题Best practice to custom date/time format system-wide? 它没有回应,所以我选择问一个新的,因为我的略有不同,我不想自定义语言环境,我希望能够指定

LC_TIME=??

并获得“正确”的格式。就我而言,理想的答案是参考文档,其中详细说明了用于各种语言环境的格式,以便我可以选择最接近我想要的 LC_TIME。

顺便说一下,我已经使用我满意的设置完成了手动修改 en_CA.UTF8 的练习,但是在多个环境中这样做太费时了,必须有一种更简单的方法。

Ste*_*itt 4

大多数 Linux 系统上的区域设置数据是在源代码中定义glibc;我\xe2\x80\x99 将解释如何使用它来查找匹配的语言环境。

\n\n

在存储库的克隆中,进入localedata/locales;这里每个区域设置都是一个单独的文件,日期格式由条目确定d_fmtd_t_fmt日期和时间)。如您所料,它们使用%d%m、 和%y,但通常编码为 Unicode 代码点;%is <U0025>dis <U0064>mis<U006D>yis <U0079>,其大写对应项高 32 点。

\n\n

跑步

\n\n
grep -iE \'d_t_fmt.*(%|<U0025>)(y|<U00[57]9>).*(%|<U0025>)(m|<U00[46]D>).*(%|<U0025>)(d|<U00[46]4>)\' *\n
Run Code Online (Sandbox Code Playgroud)\n\n

列出了一些候选者,其中en_DK可能是最合适的:

\n\n
$ LC_TIME=en_DK date +%x\n2018-02-11\n
Run Code Online (Sandbox Code Playgroud)\n