所以我目前正在使用
my $date = DateTime->now->mdy;
这给了我“09-10-2013”中的格式
然后我用
my $modTime = localtime((stat($some_file))[9]);
这给了我格式“Tue Sep 10 15:29:29 2013”的日期
有没有一种内置 perl 的方法可以将 $modTime 格式化为 $date 之类的格式?还是我必须手动完成?
谢谢!
好吧,根据您所说的“手动”的含义,您可以通过几个简短的步骤来完成:
# demo.
# Put the whole local time/stat/etc in parentheses where I put localtime.
#
($m,$d,$y) = (localtime)[4,3,5]; # extract date fields using a list slice
$modtime = sprintf('%02d-%02d-%4d', $m+1, $d, $y+1900); # format the string
可能有一种方法可以在一行中完成,同时包含提取和更复杂的格式字符串,但这会导致不必要的混淆。
——汤姆·威廉姆斯
from_epoch
使用构造函数创建一个 DateTime 对象。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use DateTime;
# Using $0 (the current file) in these examples.
my $epoch = (stat $0)[9];
my $dt = DateTime->from_epoch(epoch => $epoch);
say $dt->dmy;
当然,这可以重写为一行:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use DateTime;
say DateTime->from_epoch(epoch => (stat $0)[9])->dmy;
但是对于这么简单的事情,我可能会使用 Time::Piece(它是 Perl 标准发行版的一部分)而不是 DateTime。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
say localtime((stat $0)[9])->dmy;
迟到的答案,已经看到了使用 from_epoch ( DateTime->from_epoch(epoch => $epoch);
) 的好答案。您还可以使用 POSIX 的功能strftime
,例如:print strftime "%m-%d-%Y", localtime( ( stat $some_file )[9] );