gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:29:59 25 4
gpt4 key购买 nike

如何在 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

这对我来说没有好处,原因如下:

  1. 我不想看到“0 年”(空间浪费)&c,并且我不想从 pattern 中删除“%Y 年”(如果我下次确实需要几年怎么办?)
  2. 我事先知道我的精度只有毫秒,我不想看到纳秒部分的 6 个零。
  3. 我更关心美观/紧凑/人类可读性,而不是精度/机器可读性。即,我希望看到类似“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),
normalize => 1,
);
print $df->format_duration($duration);

关于Perl:如何漂亮地打印时间差(持续时间),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13199646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com