加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl:如何漂亮打印时差(持续时间)

发布时间:2020-12-16 06:17:04 所属栏目:大数据 来源:网络整理
导读:如何在perl中打印持续时间? 到目前为止我唯一能想到的就是 my $interval = 1351521657387 - 1351515910623; # millisecondsmy $duration = DateTime::Duration-new( seconds = POSIX::floor($interval/1000),nanoseconds = 1000000 * ($interval % 1000),);
如何在perl中打印持续时间?

到目前为止我唯一能想到的就是

my $interval = 1351521657387 - 1351515910623; # milliseconds
my $duration = DateTime::Duration->new(
    seconds => POSIX::floor($interval/1000),nanoseconds  => 1000000 * ($interval % 1000),);
my $df = DateTime::Format::Duration->new(
    pattern => '%Y years,%m months,%e days,' .
               '%H hours,%M minutes,%S seconds,%N nanoseconds',normalize => 1,);
print $df->format_duration($duration);

结果

0 years,00 months,0 days,01 hours,35 minutes,46 seconds,764000000 nanoseconds

由于以下原因,这对我没有好处:

>我不想看到“0年”(空间浪费)& c而且我不想从模式中删除“%Y年”(如果我下次需要多年怎么办?)
>我事先知道我的精度只有几毫秒,我不想看到纳秒部分的6个零.
>我关心的是漂亮/紧凑/人类可读性远远超过精度/机器可读性.即,我希望看到类似“1.2年”或“3.22个月”或“7.88天”或“5.7小时”或“75.5分钟”(或“1.26小时”,无论你看起来更好)或“24.7秒”之类的东西或“133.7毫秒”& c(类似于R打印difftime)

解决方法

您可以根据某些值是否为“true”动态构建模式.

...
push @pattern,'%Y years' if $duration->year;
push @pattern,'%m months' if $duration->month;
...
my $df = DateTime::Format::Duration->new(
    pattern => join(',',@pattern),);
print $df->format_duration($duration);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读