perl脚本使用不同语言环境的语言作为strftime

时间:2018-04-11 22:06:13

标签: perl strftime

我的操作系统是波兰语。我需要用perl脚本用英文打印月份名称。

区域设置:

LANG=pl_PL.UTF8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=pl_PL.UTF-8
LC_TIME="pl_PL.UTF8"
LC_COLLATE="pl_PL.UTF8"
LC_MONETARY=pl_PL.UTF-8
LC_MESSAGES="pl_PL.UTF8"
LC_PAPER=pl_PL.UTF-8
LC_NAME=pl_PL.UTF-8
LC_ADDRESS=pl_PL.UTF-8
LC_TELEPHONE=pl_PL.UTF-8
LC_MEASUREMENT=pl_PL.UTF-8
LC_IDENTIFICATION=pl_PL.UTF-8
LC_ALL=

脚本:

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

print strftime "%b %d, %Y", gmtime(time());

输出:kwi 11, 2018 预期:Mar 11, 2018

是否有比s/kwi/Mar/更智能的解决方案?

1 个答案:

答案 0 :(得分:3)

POSIX :: setlocale是你需要的

#!/usr/bin/perl -w
use strict;
use POSIX qw(setlocale strftime);
print strftime "%a %b %d, %Y", gmtime(time());
setlocale(POSIX::LC_ALL,'en_US.utf8');
print strftime "%a %b %d, %Y", gmtime(time());
setlocale(&POSIX::LC_ALL,'de_DE.utf8');
print strftime "%a %b %d, %Y", gmtime(time());

perldoc POSIX应提供其他信息。另请参阅this有关设置和重置区域设置的信息。