强制"date"使用机器默认值以外的区域设置

Joh*_*tte 24 unix bash date

有没有办法强制*nix命令"date"以独立于本地的特定格式输出?例如,如果我今天打电话给"date -u",我会在美国机器上得到:

Mon Oct 15 13:15:29 UTC 2012
Run Code Online (Sandbox Code Playgroud)

但在德国的机器上我得到:

Mo 15. Okt 13:15:31 UTC 2012
Run Code Online (Sandbox Code Playgroud)

Jan*_*ary 39

当然,您可以自己指定格式:

date +%a, %b %d
Run Code Online (Sandbox Code Playgroud)

或者您可以使用临时环境变量:

:~$ LC_ALL=de_DE.utf8 date
Mo 15. Okt 15:34:11 CEST 2012
:~$ date
Mon Oct 15 15:33:24 CEST 2012
Run Code Online (Sandbox Code Playgroud)

如您所见,只有第一个命令与德语区域设置一起运行.

  • 另外,您可以使用`locale -a`列出将用于`LC_ALL`变量的已安装语言环境 (4认同)
  • 正确的变量是**LC_TIME**,即`LC_TIME=de_DE.utf8 date`。对于单个命令可能无关紧要,但由于页面是一般查询的第一个搜索结果,因此可能值得一提。 (2认同)

che*_*ner 12

您可以修改date运行的环境.我不知道这是否是最好的方法(区域设置处理中使用的变量很多),但以下工作:

$ LANG=de_DE date
Mo 15 Okt 2012 09:34:12 EDT
Run Code Online (Sandbox Code Playgroud)

(一月打我这个答案用一分钟左右的时间,但我会离开我的答案了,希望会有一些会澄清变量(LC_ALL,LANG,等)是最"合适".)

  • 来自 [POSIX] 的定义(http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html):应用程序可以使用“Lang”来确定用于错误消息和指令、整理序列、 **日期格式**,等等。`LC_ALL` 确定所有语言环境类别的值,并优先于任何其他环境变量。 (2认同)

qin*_*qin 8

LC_TIME就够了,你可以用这个。

LC_TIME="de_DE.UTF-8"  date
Run Code Online (Sandbox Code Playgroud)


Ser*_*ndt 6

安装language-pack-xx

首先,确保已安装目标语言环境的语言包。在 Debian 派生的 GNU/Linux 发行版上,荷兰语支持的安装方式如下:

$ sudo apt install language-pack-nl
Run Code Online (Sandbox Code Playgroud)

此命令还将自动安装language-pack-nl-base. 这是我通过指定得到的结果LC_TIME。这比使用 更具体LC_ALL。(指定LANG在 Xubuntu LTS 上不起作用。)

$ date '+%A %e %B %Y'
Friday 16 October 2015

$ LC_TIME='nl_BE.UTF-8' date '+%A %e %B %Y'
vrijdag 16 oktober 2015
Run Code Online (Sandbox Code Playgroud)