在我的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)
..但它没有用.
我不明白所有不同的日期/时间模块是混合的.你只需要其中一些,而不是全部.如果你想使用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项目以及推荐模块列表的更多信息: