我正在工作中编写Perl程序,并卡在(我认为是)一个微不足道的问题上。我只需要按照格式“06/13/2012”来构建一个字符串(始终为10个字符,因此对于小于10的数字需要添加0)。
目前我的代码如下:
use Time::localtime;
$tm=localtime;
my ($day,$month,$year)=($tm->mday,$tm->month,$tm->year);
我正在工作中编写Perl程序,并卡在(我认为是)一个微不足道的问题上。我只需要按照格式“06/13/2012”来构建一个字符串(始终为10个字符,因此对于小于10的数字需要添加0)。
目前我的代码如下:
use Time::localtime;
$tm=localtime;
my ($day,$month,$year)=($tm->mday,$tm->month,$tm->year);
Time::Piece
,这是一个核心模块,自Perl 5版本10以来一直随附于Perl发行版中,无需额外安装。use Time::Piece;
my $date = localtime->strftime('%m/%d/%Y');
print $date;
输出
06/13/2012
您可能更喜欢使用dmy
方法,它只需要一个参数,该参数是结果字段之间要使用的分隔符,并且避免了指定完整的日期/时间格式。
my $date = localtime->dmy('/');
这会产生与我原来的解决方案完全相同的结果
dmy
、mdy
和ymd
,其中date
是ymd
的别名。默认情况下,所有这些函数都使用标准的连字符分隔符生成日期,并且可以传递替代分隔符。因此,localtime->ymd
生成的是2015-09-28
,而不是您所说的20150928
。这就是这些方法的一个大弱点——它们本身并没有描述它们所做的事情,这就是为什么我选择了strftime('%m/%d/%Y')
的原因。 - BorodinTime::Piece
首次被纳入“实验性”版本9.5中,并从未被删除,之后的第一个稳定版本将是10.0,因此如果你有一个没有Time::Piece
的版本10.1,则说明有人已经将其从安装中明确删除了。无论如何,CPAN库是Perl最大的优势之一,仅限于核心模块是愚蠢的。 - Borodinperl-5.10.1.tar.gz
,您会发现Time::Piece
在perl-5.10.1\ext\Time-Piece
的子文件夹中。如果您的系统管理员选择从头开始构建perl,则只需回答“none”而不是选择默认值来回答“您希望包括哪些扩展名?”这个问题,那么您将获得一个没有大多数核心模块的安装。 - Borodinuse DateTime qw();
DateTime->now->strftime('%m/%d/%Y')
表达式返回06/13/2012
如果你喜欢走弯路:
my (undef,undef,undef,$mday,$mon,$year) = localtime;
$year = $year+1900;
$mon += 1;
if (length($mon) == 1) {$mon = "0$mon";}
if (length($mday) == 1) {$mday = "0$mday";}
my $today = "$mon/$mday/$year";
Time::Piece
出现在 5.9.5 的核心中。 - JRFergusonperldoc perlhist | perl -ne 'die "$_\n" if m/5.9.5.*20[01].{8}/'
指出,5.9.5版本是在2007年7月7日发布的。 - MarkHuuse Time::Piece;
...
my $t = localtime;
print $t->mdy("/");# 02/29/2000
Unix系统中的Perl代码:
# Capture date from shell
my $current_date = `date +"%m/%d/%Y"`;
# Remove newline character
$current_date = substr($current_date,0,-1);
print $current_date, "\n";
chomp
函数也可以用于去除换行符:chomp $current_date
。 - Christopher BottomsMM/DD/YYYY
格式。我个人更喜欢 ISO 8601 的 YYYY-MM-DD
格式,但这并不能正确回答这个问题。 - Keith Thompsonuse strict;
use warnings;
use Date::Calc qw();
my ($y, $m, $d) = Date::Calc::Today();
my $ddmmyyyy = sprintf '%02d.%02d.%d', $d, $m, $y;
print $ddmmyyyy . "\n";
2014年5月14日
YYYY-MM-DD
,而不是MM/DD/YYYY
。 - Keith Thompson