在Perl语言中,将600 seconds (记法为N秒的10分钟)转换为00:10:00 (记法为HH:MM:SS的10分钟)的最简单方法是什么?
发布于 2011-03-03 16:11:48
这取决于你对“最简单”的定义。我喜欢合理的面向未来的代码,我再也不需要考虑它了,它看起来像这样:
use strict;
use warnings;
use 5.10.0;
use DateTime::Duration;
use DateTime::Format::Duration;
sub duration_to_hms {
my ($duration) = @_;
my $formatter = DateTime::Format::Duration->new(
pattern => "%H:%M:%S",
normalize => 1,
);
return $formatter->format_duration($duration);
}
my $duration = DateTime::Duration->new(seconds => 600);
say duration_to_hms($duration);发布于 2011-03-02 20:52:27
使用gmtime
$seconds = 600;
printf ("%02d:%02d:%02d\n",(gmtime($seconds))[2,1,0]);打印:
00:10:00发布于 2020-11-14 02:26:38
使用POSIX函数。下面是一个完整的工作示例。
use POSIX 'strftime';
my $seconds = 615;
print(strftime('%T', gmtime $seconds));上面的输出示例如下:
00:10:15
备注:如果小时值通过24,这将不起作用。在这种情况下,或者如果您只是对使用POSIX工具有限制,您可以使用此自定义函数来替换它...
sub formatSeconds {
my ($args) = @_;
my $seconds = $args->{seconds};
my ($hours, $hourremainder) = (($seconds/(60*60)), $seconds % (60*60));
my ($minutes, $seconds) = (int $hourremainder / 60, $hourremainder % 60);
($hours, $minutes, $seconds) = (sprintf("%02d", $hours), sprintf("%02d", $minutes), sprintf("%02d", $seconds));
return $hours . ':' . $minutes . ':' . $seconds;
}
formatSeconds({seconds=>642}); // output: "00:10:42"感谢@oylenshpeegul提供了使用strftime的灵感!
https://stackoverflow.com/questions/5167602
复制相似问题