我正在计算相隔几天的2个日期之间的差异,但我从Delta_Format得到的结果显示了以小时为单位的日期。
print Delta_Format(DateCalc(ParseDate("2014-03-07 14:16:23"), ParseDate("2014-03-03 18:43:10")), 0, ("%Mv", "%dv", "%hv", "%mv", "%sv")) . "!\n";
给我这个输出:
0 0 -91 -33 -13!
这意味着零个月,零天,91小时,33分钟,13秒。如何让Delta_Format显示3天,19小时,33分钟,13秒?
答案 0 :(得分:1)
基本上您正在尝试规范化Date::Manip::Delta。您可以在第4个参数中为DateCalc函数指定不同的模式,mode = 1是normalize。不幸的是,它的实现方式允许负值,而我不确定如何强制只是积极的。这就是为什么我从未以任何严肃的方式使用过这个模块的原因之一:)
use Date::Manip;
use strict;
use warnings;
my $date1 = ParseDate("2014-03-07 14:16:23");
my $date2 = ParseDate("2014-03-03 18:43:10");
my $delta = DateCalc($date2,$date1, \my $err, 1);
print Delta_Format($delta, "%Mv %dv %hv %mv %sv"); # 0 4 -4 -26 -47
使用Time :: Piece
的一种替代方案use Time::Piece;
use strict;
use warnings;
my $tp1 = Time::Piece->strptime("2014-03-07 14:16:23", "%Y-%m-%d %H:%M:%S");
my $tp2 = Time::Piece->strptime("2014-03-03 18:43:10", "%Y-%m-%d %H:%M:%S");
my $diff = $tp1 - $tp2;
print $diff->pretty, "\n"; #3 days, 19 hours, 33 minutes, 13 seconds