所以我目前正在使用
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格式? 或者我必须手动完成吗?
谢谢!
答案 0 :(得分:3)
那么,根据“手动”的含义,你可以通过几个简短的步骤来完成:
# 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
可能有一种方法可以在一行中完成,包括提取和更复杂的格式字符串,但这会导致不必要的混淆。
-Tom Williams
答案 1 :(得分:2)
使用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;
答案 2 :(得分:1)
迟到回答,已经看到了使用from_epoch(DateTime->from_epoch(epoch => $epoch);
)的好答案。您也可以使用POSIX的函数strftime
,如:print strftime "%m-%d-%Y", localtime( ( stat $some_file )[9] );