将字符串"20-May-07"转换为日期并进行操作

Rah*_*sai 0 perl datetime

在我的perl程序中,我计算保修结束日期的保修开始日期差异为3年.以下是我到目前为止编写的代码块:

use Time::ParseDate;
use DateTime;
use POSIX;
use DateTime::Duration;

my $warranty_expiration_string = "20-May-07";
my $epoch = parsedate($warranty_expiration_string);
my $warranty_expiration = strftime "%D", localtime($epoch);   # returns: 05/20/07
Run Code Online (Sandbox Code Playgroud)

如何从$warranty_expiration获得$warranty_start日期中扣除3年?
我试过了,

$warranty_start->subtract(DateTime::Duration->new('years' => 3));
Run Code Online (Sandbox Code Playgroud)

..但它没有用.

zos*_*tay 5

我不明白所有不同的日期/时间模块是混合的.你只需要其中一些,而不是全部.如果你想使用DateTime进行日期数学运算,你需要这样的东西:

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

my $dateparser = DateTime::Format::Strptime->new( pattern => '%d-%b-%y' );

my $warranty_expiration = $dateparser->parse_datetime($warranty_expiration_string);
my $warranty_start      = $warranty_expiration->clone->subtract( years => 3);
Run Code Online (Sandbox Code Playgroud)

大多数DateTime :: Format ::*模块都与DateTime一起使用,如果可以,我更喜欢使用它们.

您可能还想了解有关正在进行的DateTime项目以及推荐模块列表的更多信息: