在Linux系统中,date
命令是用于显示或设置系统日期和时间的基本工具,其输出格式受系统locale
设置的影响,默认情况下,若系统locale
为中文环境,date
命令会显示中文格式的日期和时间;若需显示英文,可通过修改locale
或直接使用date
的格式化选项实现,以下将详细介绍具体方法及注意事项。
默认显示与locale
的关系
date
命令的输出格式由系统的locale
环境变量控制,主要包括LANG
、LC_TIME
等,其中LC_TIME
专门影响日期和时间的显示格式,若系统未明确设置LC_TIME
,则默认使用LANG
的值,当LANG=zh_CN.UTF-8
时,date
可能输出“2023年10月01日 星期日 12:00:00 CST”;而当LANG=en_US.UTF-8
时,输出则会变为“Sun Oct 1 12:00:00 CST 2023”,要显示英文日期,核心思路是调整locale
或直接指定格式化字符串。
临时修改locale
显示英文日期
若仅需临时在当前终端会话中显示英文日期,可通过export
命令修改LANG
或LC_TIME
环境变量。
export LANG=en_US.UTF-8 # 设置美式英语locale date # 输出:Sun Oct 1 12:00:00 CST 2023
或单独设置LC_TIME
(不影响其他locale设置):
export LC_TIME=en_GB.UTF-8 # 设置英式英语locale(日/月/年格式) date # 输出:Sun 01 Oct 12:00:00 CST 2023
说明:
en_US.UTF-8
为美式英语,日期格式通常为“月 日, 年”(如“Oct 1, 2023”);en_GB.UTF-8
为英式英语,日期格式通常为“日 月 年”(如“01 Oct 2023”);- 临时修改仅在当前终端会话有效,关闭终端后失效。
使用date
格式化选项直接输出英文
若不希望修改locale
,可通过date
命令的加格式化字符串直接指定输出格式,这种方式更灵活且不受系统locale
影响,以下是常用格式化字符及其含义:
格式化字符 | 含义 | 示例输出(2023-10-01 12:00:00) |
---|---|---|
%A | 星期全名(英文) | Sunday |
%a | 星期缩写(英文) | Sun |
%B | 月份全名(英文) | October |
%b | 月份缩写(英文) | Oct |
%d | 日(数字,补零) | 01 |
%m | 月(数字,补零) | 10 |
%Y | 年份(四位数字) | 2023 |
%y | 年份(两位数字) | 23 |
%H | 小时(24小时制,补零) | 12 |
%I | 小时(12小时制,补零) | 12 |
%M | 分钟(补零) | 00 |
%S | 秒(补零) | 00 |
%p | 上午/下午(英文) | AM/PM |
示例用法:
- 显示“星期, 月 日, 年”格式:
date +"%A, %B %d, %Y" # 输出:Sunday, October 01, 2023
- 显示“缩写星期 缩写 月 日 时:分:秒 年”格式:
date +"%a %b %d %H:%M:%S %Y" # 输出:Sun Oct 01 12:00:00 2023
- 显示“月/日/年, 时:分 AM/PM”格式(美式短日期):
date +"%m/%d/%Y, %I:%M %p" # 输出:10/01/2023, 12:00 PM
- 显示“日-月-年”格式(英式短日期):
date +"%d-%b-%Y" # 输出:01-Oct-2023
永久修改系统locale
以默认显示英文
若希望系统所有终端会话默认显示英文日期,需永久修改locale
配置,步骤如下(以Debian/Ubuntu系统为例):
-
编辑
locale.gen
文件:sudo vim /etc/locale.gen
取消注释以下行(根据需求选择,如美式英语):
en_US.UTF-8 UTF-8 # en_GB.UTF-8 UTF-8 # 英式英语(如需可取消注释)
-
生成locale:
sudo locale-gen
-
设置默认locale:
编辑/etc/default/locale
文件(若不存在则创建):sudo vim /etc/default/locale
添加以下内容(美式英语):
LANG="en_US.UTF-8" LC_TIME="en_US.UTF-8"
或英式英语:
LANG="en_GB.UTF-8" LC_TIME="en_GB.UTF-8"
-
重启系统或重新登录:
修改后需重启系统或重新登录终端,使locale
生效。
说明:
- CentOS/RHEL系统需编辑
/etc/locale.conf
文件,步骤类似; - 永久修改会影响系统所有依赖
locale
的应用,确保符合实际需求。
时区对显示的影响
date
命令的输出还包含时区信息(如CST、UTC等),若需调整时区,可通过TZ
环境变量实现,显示纽约时间:
TZ="America/New_York" date +"%A, %B %d, %Y %H:%M:%S %Z" # 输出:Sunday, October 01, 2023 00:00:00 EDT
时区修改仅影响时间显示,不改变locale
对日期格式的影响,可结合格式化选项使用。
常见英文日期格式示例
以下为几种实用的英文日期格式及对应命令:
格式需求 | 命令 | 输出示例 |
---|---|---|
RFC 2822邮件日期格式 | date -R | Sun, 1 Oct 2023 12:00:00 +0000 |
ISO 8601标准格式 | date +”%Y-%m-%dT%H:%M:%S%z” | 2023-10-01T12:00:00+0000 |
“Month Day, Year” | date +”%B %d, %Y” | October 01, 2023 |
“Day-Month-Year” | date +”%d-%B-%Y” | 01-October-2023 |
含时间的美式短日期 | date +”%m/%d/%y %I:%M %p” | 10/01/23 12:00 PM |
相关问答FAQs
问题1:为什么设置了LANG=en_US.UTF-8
,date
显示的仍是中文?
解答:可能的原因有:
LC_TIME
环境变量覆盖了LANG
的设置:可通过echo $LC_TIME
检查,若不为空,需执行unset LC_TIME
或单独设置LC_TIME=en_US.UTF-8
;/etc/locale.gen
中未生成对应的locale
:需取消注释en_US.UTF-8
并执行sudo locale-gen
;- 当前终端会话未生效:可重新执行
export LANG=en_US.UTF-8
或重启终端。
问题2:如何让date
命令默认始终显示“YYYY-MM-DD”格式的英文日期?
解答:可通过alias
命令为date
设置别名,使其默认携带格式化参数,编辑用户配置文件(如~/.bashrc
或~/.zshrc
),添加以下内容:
alias date='date +"%Y-%m-%d"'
保存后执行source ~/.bashrc
(或重新登录终端),之后直接输入date
即可输出“2023-10-01”格式的日期,若需保留时间信息,可修改为alias date='date +"%Y-%m-%d %H:%M:%S"'
。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/17394.html