是否有用于将秒数转换为英语的CPAN模块?

Tim*_*Tim 5 perl time cpan time-format intervals

是否有CPAN模块可以将数秒转换为人类可读的英语间隔描述?

secToEng( 125 ); # => 2 min 5 sec
secToEng( 129_600 ); # => 1 day 12 h
Run Code Online (Sandbox Code Playgroud)

只要它是人类可读的,格式就不重要了.

我知道实施它将是微不足道的.

Tim*_*Tim 13

事实证明,Time :: Duration确实如此.

$ perl -MTime::Duration -E 'say duration(125)'
2 minutes and 5 seconds
$ perl -MTime::Duration -E 'say duration(129_700)'
1 day and 12 hours
Run Code Online (Sandbox Code Playgroud)

从概要:

时间::持续时间 - 持续时间的四舍五入或精确英语表达

示例在程序中使用,以结束运行时结束:

my $start_time = time();
use Time::Duration;
# then things that take all that time, and then ends:
print "Runtime ", duration(time() - $start_time), ".\n";
Run Code Online (Sandbox Code Playgroud)

在报告文件年龄的程序中使用示例:

use Time::Duration;
my $file = 'that_file';
my $age = $^T - (stat($file))[9];  # 9 = modtime
print "$file was modified ", ago($age);
Run Code Online (Sandbox Code Playgroud)


Ala*_*avi 10

DateTime 可以使用:

#!/usr/bin/env perl

use strict;
use warnings;

use DateTime;
use Lingua::EN::Inflect qw( PL_N );

my $dt = DateTime->from_epoch( 'epoch' => 0 );
$dt = $dt->add( 'seconds' => 129_600 );
$dt = $dt - DateTime->from_epoch( 'epoch' => 0 );

my @date;
push @date, $dt->days . PL_N( ' day', $dt->days ) if $dt->days;
push @date, $dt->hours . PL_N( ' hour', $dt->hours ) if $dt->hours;
push @date, $dt->minutes . PL_N( ' minute', $dt->minutes ) if $dt->minutes;
push @date, $dt->seconds . PL_N( ' second', $dt->seconds ) if $dt->seconds;

print join ' ', @date;
Run Code Online (Sandbox Code Playgroud)

产量

1 day 12 hours
Run Code Online (Sandbox Code Playgroud)

  • 我不得不承认,"xxx(s)"符号是我的个人宠儿.如果他们可以做任何事情,计算机*应该能够计算并区分"1天"和"2天".:(请注意,'天:1`中的前缀表示法没有此问题. (6认同)
  • 我同意.我在我的代码中作弊,只是使用dhm s. (2认同)

miv*_*ivk 5

从Perl v5.9.5开始,模块Time :: Seconds和Time :: Piece是Perl核心发行版的一部分。因此,您可以在不安装其他模块的情况下使用它们。

perl -MTime::Seconds -e 'my $s=125; my $ts=new Time::Seconds $s; print $ts->pretty, "\n"'
# 2 minutes, 5 seconds

perl -MTime::Seconds -e 'my $s=129_600; my $ts=Time::Seconds->new($s); print $ts->pretty, "\n"'
# 1 days, 12 hours, 0 minutes, 0 seconds
Run Code Online (Sandbox Code Playgroud)

您也可以使用这样的东西$ts->weeks$ts->minutes等等。