2012-10-29 51 views
9

我正在一个Perl脚本工作,以天添加到日期和显示newdate:Perl脚本 - 天添加日期,以获得新的日期

use Time::ParseDate; 
use Time::CTime; 

my $date = "02/01/2003"; 
my $numdays = 30; 

my $time = parsedate($date); 

# add $numdays worth of seconds 
my $newtime = $time + ($numdays * 24 * 60 * 60); 

my $newdate = strftime("%m/%d/%Y",localtime($newtime)); 

print "$newdate\n"; 

    The output will be: 

    03/03/2003 

现在我该怎样设置输入的日期字段要为yyyymmdd例如:我的$ date = “20030102”

而且输出将需要:20030303

由于从输入格式的旧格式

+0

待办事项你的意思是yyyyddmm作为格式或60作为添加的天数?由于增加30天到20030102(2003年1月2日)是不会让你到20030303(2003年3月3日) – MkV

回答

5

转换$日期:

$date =~ s%(....)(..)(..)%$3/$2/$1%; 

如果输出格式不应该是%m/%d/%Y,那么不要设置它。你显然需要%Y%m%d

+0

太好了......谢谢! – Gallop

9

您可以使用DateTime + DateTime::Format::Strptime

#!/usr/bin/perl 
use strict; 

use DateTime; 
use DateTime::Format::Strptime; 

my $strp = DateTime::Format::Strptime->new(
    pattern => '%m/%d/%Y' 
); 

# convert date to 
my $date = '02/01/2003'; 
my $dt = $strp->parse_datetime($date); 
printf "%s -> %s\n", $date, $dt->add(days => 30)->strftime("%d/%m/%Y"); 

输出

02/01/2003 -> 03/03/2003 
8

您使用Time::Piece + Time::Seconds(在因为Perl 5.10核心),

use Time::Piece(); 
use Time::Seconds; 
my $date = '20030102'; 
my $numdays = 60; # 30 doesn't get us to march 

my $dt = Time::Piece->strptime($date, '%Y%m%d'); 
$dt += ONE_DAY * $numdays; 
print $dt->strftime('%Y%m%d');