在Perl中有一种方法可以从日期中减去10天,该日期将从文本文件传递,输出应该是01-jan-1999格式。
我正在使用下面的代码来阅读文件并获取日期,之后我减去了日期。
25-JAN-2013
#!/usr/bin/perl
use warnings;
use strict;
use DateTime;
my $inp= "date.txt";
my $todate;
my $fromdate;
open(date,"$inp");
while(<date>)
{
$todate = $_ ;
print "$todate \n";
}
$fromdate = $todate - 10 days ;
答案 0 :(得分:9)
这是一个使用DateTime的答案。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use DateTime::Format::Strptime;
use DateTime;
my $parser = DateTime::Format::Strptime->new(
pattern => '%d-%B-%Y'
);
my $input = '25-jan-2013';
my $todate = $parser->parse_datetime($input);
my $fromdate = $todate->clone;
$fromdate->subtract(days => 10);
say 'From: ', $fromdate->strftime('%d-%B-%Y');
say 'To: ', $todate->strftime('%d-%B-%Y');
答案 1 :(得分:2)
在过去,您可以使用Time::Local将时间转换为自Epoc以来的秒数,减去十天内的秒数(10 * 24 * 60 * 60),然后转换它使用localtime回到了一个时间。这很有趣,很有教育意义,而且大多数情况下都过于复杂且容易出错。
当我能够使用Perl 5.10或更高版本时,我更喜欢使用Time::Piece,因为它使事情变得简单,最重要的是,它是一个标准的Perl模块。此外,它与另一个标准Perl模块Time::Seconds配合使用:
use warnings;
use strict;
use autodie;
use feature qw(say);
use Time::Piece;
use Time::Seconds;
my $date = "25-jan-2013";
#Create the "date object". The `%d-%b-%Y" is format the date is in
my $my_date = Time::Piece->strptime($date, "%d-%b-%Y"); #
#Now subtract ten days from it
$my_date -= ( 10 * ONE_DAY ); #Constant from Time::Seconds
say $my_date; #Prints out Tue Jan 15 00:00:00 2013
#Printing it out in dd-mmm-yyyy format you had
say $my_date->mday . "-" . $my_date->monname . "-" . $my_date->year;
答案 2 :(得分:0)
您可以使用Date::Manip:
#!/usr/bin/perl
use warnings;
use strict;
use Date::Manip;
my $todate = '25-jan-2013';
my $newdate = DateCalc(ParseDate($todate), ParseDateDelta('- 10 days'));
print "$newdate\n";