perl - 无法使用 Perl 的 Datetime::Format::Duration 控制小时、分钟、秒的格式

标签 perl

下面的代码片段计算了两次之间的持续时间,但我不明白如何控制格式化输出。在此示例中,持续时间不输出为 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/

相关文章:

perl - 如何获取具有给定属性的所有 Unicode 字符的列表?

xml - 如何使用 Perl XML::LibXML 表示默认的空命名空间

windows - Windows下的git svn clone large repo : out of memory - not a large file issue

perl - 如何使用 SMTP 和 Perl 向我的 Gmail 帐户发送电子邮件?

perl - 如何引用其名称将在运行时传递的 perl 模块?

perl - 在 __DATA__ 上使用 Tie::File 时出现意外行为

arrays - 识别一个散列数组中不在另一个散列数组中的元素(perl)

Perl Facebook::Graph API v2.x

perl - 是否有可能在 EV 回调中使用 Perl 进行 longjump 之类的操作?

perl - 如何使用 unix 列出在文件夹中找不到的字符串