1

所以我目前正在使用

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 之类的格式?还是我必须手动完成?

谢谢!

4

3 回答 3

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

可能有一种方法可以在一行中完成,同时包含提取和更复杂的格式字符串,但这会导致不必要的混淆。

——汤姆·威廉姆斯

于 2013-09-11T01:55:29.107 回答
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;
于 2013-09-11T09:46:43.020 回答
1

迟到的答案,已经看到了使用 from_epoch ( DateTime->from_epoch(epoch => $epoch);) 的好答案。您还可以使用 POSIX 的功能strftime,例如:print strftime "%m-%d-%Y", localtime( ( stat $some_file )[9] );

于 2013-09-11T19:03:11.600 回答