如何在波兰语系统中用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
相关产品推荐
相关产品推荐

