perl用localtime打开昨天的日期文件()

时间:2014-05-05 20:43:07

标签: perl

我需要打开今天日期和昨天日期的文件我可以打开今天的文件,但我不知道如何打开昨天,我使用当地时间,因为我的perl版本是5.8.8。  所以其他时间/日期模块不可用 这就是我到目前为止所拥有的

#!/usr/local/bin/perl

@months = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
@days = qw(Sun Mon Tue Wed Thu Fri Sat Sun);

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(); 
$year = $year+1900;

print "c:\\DBR_$year\\$months[$mon]\\Failures_output\\$mday$months[$mon]report.csv"
    || die "can't open output file for reading: $!";

打印

c:\DBR_2014\May\Failures_output\5Mayreport.csv

现在我如何用昨天的日期打开相同的文件

2 个答案:

答案 0 :(得分:3)

localtime / mktime往返将为您提供昨天开始午夜的纪元编号(即mday比现在少1的时间)

use POSIX 'mktime';

my @now = localtime();
my $yesterday = mktime 0, 0, 0, $now[3]-1, $now[4], $now[5];

然后你可以把它放到strftime中给你时间字符串;你不需要像这样的几个月的数组

use POSIX 'strftime';

my $path = strftime("c:\\DBR_%Y\\%b\\Failures_output\\%d%breport.csv", localtime($yesterday));

(您不必担心mday已经为1的情况,因为mktime会妥善处理这个问题。

答案 1 :(得分:0)

localtime可以使用一个纪元秒的参数,所以请到昨天的日期,只需致电

@yesterday = localtime( time - 86400 );   # 86400 = 24 * 60 * 60