Perl,将时间戳转换为可读日期的问题

时间:2016-07-18 09:57:48

标签: perl

我有以下一个班轮,这应该将日期从一周前的今天转换为可读格式。

my $week_ago = strftime("%Y-%m-%d", time - 604800);

但是我收到以下错误:

Usage: POSIX::strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1)

有谁可以提出问题在这里?根据我的理解,strftime应该将时间戳转换为可读日期。

2 个答案:

答案 0 :(得分:4)

使用Time::Piece。它是一个替代localtime(和gmtime)的核心模块,但将其转换为更有用的形式。

use Time::Piece;
my $week_ago = localtime() - 604800;
print $week_ago -> strftime("%Y-%m-%d");

注意 - localtimegmtime现在都返回Time::Piece个对象,这意味着您也可以对其进行数字比较。

您也可以清楚 - 导入Time::Seconds并使用它来定义更多有用的常量(如ONE_DAYONE_WEEK),如评论中Borodin所述。

use Time::Piece;
use Time::Seconds qw ( ONE_WEEK ); 
my $week_ago = localtime() - ONE_WEEK;

答案 1 :(得分:4)

正如您的错误消息所示,POSIX' strftime会获取一个vau列表,而不是unix时间戳。在致电之前,您需要致电localtimegmtime

 my $one_minute_ago = strftime("%Y-%m-%d", localtime(time - 60)); 

如果您在一天之内进行短期金额的日期数学计算,则上述示例很好。以上所有内容都容易出错。对于一周前方案,请改用sobrique's answer