You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在波兰语系统中用Perl脚本让strftime输出英文月份名称

解决Perl在波兰语Locale下输出英文月份的问题

嘿,我明白你的需求——在波兰语系统Locale环境下,让Perl脚本输出英文的月份名称对吧?问题出在你的LC_TIME配置是pl_PL.UTF8,而strftime函数会遵循这个Locale设置来生成日期格式,所以默认输出的是波兰语月份。下面给你两种实用的解决方案:

方法1:临时切换LC_TIME到英文Locale

你可以在脚本里临时把LC_TIME设置为英文,用完再恢复原来的配置,这样既不影响系统全局设置,也能得到英文月份:

#!/usr/bin/perl -w
use strict;
use POSIX qw(setlocale strftime LC_TIME);

# 先保存当前的LC_TIME配置,方便后续恢复
my $original_lc_time = setlocale(LC_TIME);

# 切换到英文Locale
setlocale(LC_TIME, 'en_US.UTF-8') or die "无法设置英文Locale:$!";

# 输出日期,现在月份是英文的
print strftime "%b %d, %Y", gmtime(time());

# 恢复原来的LC_TIME配置(可选,但养成好习惯很重要)
setlocale(LC_TIME, $original_lc_time);

方法2:手动定义月份数组(不依赖Locale)

如果不想折腾Locale设置,直接自己定义英文月份数组,手动映射月份索引也是个简单可靠的办法:

#!/usr/bin/perl -w
use strict;

# 定义英文月份缩写数组,下标0对应1月,正好匹配gmtime返回的mon值(0-11)
my @english_months = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);

# 拆解gmtime返回的时间元素
my ($sec, $min, $hour, $day, $mon, $year) = gmtime(time());
$year += 1900; # gmtime返回的年份是从1900年开始的偏移量,需要加上1900才是当前年份

# 拼接输出日期
print "$english_months[$mon] $day, $year\n";

小提示

如果用方法1时遇到“无法设置英文Locale”的错误,可能是你的系统没安装en_US.UTF-8 Locale。可以用以下命令安装(根据系统不同调整):

  • Debian/Ubuntu系:sudo locale-gen en_US.UTF-8
  • RHEL/CentOS系:sudo localedef -i en_US -f UTF-8 en_US.UTF-8

不过看你的LC_CTYPE已经是en_US.UTF-8,应该已经安装好了,大概率不会遇到这个问题~

内容的提问来源于stack exchange,提问作者F. Grela

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:58:49