我有以下一个班轮,这应该将日期从一周前的今天转换为可读格式。
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
应该将时间戳转换为可读日期。
答案 0 :(得分:4)
使用Time::Piece
。它是一个替代localtime
(和gmtime
)的核心模块,但将其转换为更有用的形式。
use Time::Piece;
my $week_ago = localtime() - 604800;
print $week_ago -> strftime("%Y-%m-%d");
注意 - localtime
和gmtime
现在都返回Time::Piece
个对象,这意味着您也可以对其进行数字比较。
您也可以清楚 - 导入Time::Seconds
并使用它来定义更多有用的常量(如ONE_DAY
和ONE_WEEK
),如评论中Borodin所述。
use Time::Piece;
use Time::Seconds qw ( ONE_WEEK );
my $week_ago = localtime() - ONE_WEEK;
答案 1 :(得分:4)
正如您的错误消息所示,POSIX' strftime
会获取一个vau列表,而不是unix时间戳。在致电之前,您需要致电localtime
或gmtime
。
my $one_minute_ago = strftime("%Y-%m-%d", localtime(time - 60));
如果您在一天之内进行短期金额的日期数学计算,则上述示例很好。以上所有内容都容易出错。对于一周前方案,请改用sobrique's answer。