将纪元时间转换为mm-dd-yyyy本地日期

时间:2013-09-11 00:42:21

标签: perl datetime localtime

所以我目前正在使用

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格式? 或者我必须手动完成吗?

谢谢!

3 个答案:

答案 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] );