下面的代码片段计算了两次之间的持续时间,但我不明白如何控制格式化输出。在此示例中,持续时间不输出为 00 天 22 小时 44 分钟 03 秒。相反,它输出为 00 天,00 小时,1364 分钟,03 秒。我该如何控制它?
#!/usr/bin/perl
use strict;
use DateTime;
use DateTime::Format::Strptime;
use DateTime::Format::Duration;
use feature 'say';
my $parser = DateTime::Format::Strptime->new(
pattern =>'%Y-%m-%d %H:%M:%S',
time_zone => 'UTC'
);
my $startDateTime = $parser->parse_datetime('2013-10-13 05:59:44');
my $stopDateTime = $parser->parse_datetime('2013-10-14 04:43:47');
my $duration = DateTime::Duration->new($stopDateTime-$startDateTime);
my $format = DateTime::Format::Duration->new(
pattern => '%d days, %H hours, %M minutes, %S seconds'
);
say $startDateTime;
say $stopDateTime;
say $format->format_duration($duration);
结果输出:
2013-10-13T05:59:44
2013-10-14T04:43:47
00 days, 00 hours, 1364 minutes, 03 seconds
最佳答案
my $format = DateTime::Format::Duration->new(
pattern => '%d days, %H hours, %M minutes, %S seconds',
normalize => 1,
);
say $format->format_duration($duration);
或者为了避免前导零:
say sprintf "%d days, %d hours, %d minutes, %d seconds",
$duration->in_units(qw( days hours minutes seconds ));
关于perl - 无法使用 Perl 的 Datetime::Format::Duration 控制小时、分钟、秒的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20049665/