Linux下如何分离时间格式与语言设置,实现自定义时间格式搭配英文星期/月份名称
Linux下如何分离时间格式与语言设置,实现自定义时间格式搭配英文星期/月份名称
我太懂这种纠结了——默认的LC_TIME把时间格式和语言硬绑在一起,想自定义格式又要保留英文的星期、月份名,自定义完整locale还容易搞崩不少应用,确实头疼。这里给你几个更靠谱的解决方案,亲测实用:
1. 直接用date命令的自定义格式(临时/脚本场景首选)
如果只是临时输出或者在脚本里用,完全不用改locale,直接给date指定格式参数就行:
date +"%Y-%m-%d, %A, %T %Z"
解释下各个参数:
%Y-%m-%d:年-月-日格式%A:完整英文星期名(比如Monday)%T:时分秒(24小时制,比如20:05:47)%Z:时区缩写(比如CET)
执行后直接输出你想要的YYYY-MM-DD, Monday, 20:05:47 CET格式,完美匹配需求。
2. 环境变量+应用单独配置(持久化场景)
如果想让日常使用的工具(比如Shell提示符、部分桌面应用)默认用这个格式,可以拆分两步:
- 先设置
LC_TIME=en_US.UTF-8,确保系统用英文的星期、月份名称。可以把这行加到~/.bashrc或~/.profile里持久生效:export LC_TIME=en_US.UTF-8 - 然后针对不同工具单独配置时间格式:
- Shell提示符:修改
PS1变量,把时间格式嵌进去。比如在~/.bashrc里加:
重启Shell后,提示符里的时间就会按你要的格式显示,且星期是英文。PS1='[\u@\h \D{%Y-%m-%d, %A, %T %Z}]$ ' - 桌面应用:多数支持自定义时间格式的应用(比如日历、任务栏插件),可以直接在设置里输入格式字符串
YYYY-MM-DD, A, HH:mm:ss z(具体参数看应用文档),配合LC_TIME=en_US.UTF-8就能显示英文名称。
- Shell提示符:修改
3. 轻量自定义Locale(兼顾全局生效与兼容性)
如果你需要全局生效,又不想用完整自定义Locale的麻烦,可以只修改时间格式部分,保留英文语言包的其他内容:
- 复制默认英文Locale的配置文件到本地:
cp /usr/share/i18n/locales/en_US ~/custom_en_US - 编辑这个文件,找到
d_t_fmt(日期时间格式)这一行,替换成你要的格式:d_t_fmt "%Y-%m-%d, %A, %T %Z" - 编译这个轻量自定义Locale:
localedef -i ~/custom_en_US -f UTF-8 en_US.custom - 测试生效:
输出就是你要的格式,而且因为基础是英文Locale,几乎不会影响其他应用的兼容性。如果想全局生效,可以把LC_TIME=en_US.custom dateexport LC_TIME=en_US.custom加到你的Shell配置文件里。
这些方案都避开了LC_TIME绑定格式和语言的问题,不需要复杂的全局配置,也不会搞乱应用,比之前那些不适用的方法实用多了。
备注:内容来源于stack exchange,提问作者cprn
相关产品推荐
相关产品推荐

