首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Perl中,将X秒转换为HH:MM:SS格式的最简单方法是什么?

在Perl中,将X秒转换为HH:MM:SS格式的最简单方法是什么?
EN

Stack Overflow用户
提问于 2011-03-02 20:41:52
回答 3查看 3.4K关注 0票数 2

在Perl语言中,将600 seconds (记法为N秒的10分钟)转换为00:10:00 (记法为HH:MM:SS的10分钟)的最简单方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-03 16:11:48

这取决于你对“最简单”的定义。我喜欢合理的面向未来的代码,我再也不需要考虑它了,它看起来像这样:

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2011-03-02 20:52:27

使用gmtime

代码语言:javascript
复制
$seconds = 600;
printf ("%02d:%02d:%02d\n",(gmtime($seconds))[2,1,0]);

打印:

代码语言:javascript
复制
00:10:00
票数 8
EN

Stack Overflow用户

发布于 2020-11-14 02:26:38

使用POSIX函数。下面是一个完整的工作示例。

代码语言:javascript
复制
use POSIX 'strftime';
my $seconds = 615;
print(strftime('%T', gmtime $seconds));

上面的输出示例如下:

00:10:15

备注:如果小时值通过24,这将不起作用。在这种情况下,或者如果您只是对使用POSIX工具有限制,您可以使用此自定义函数来替换它...

代码语言:javascript
复制
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的灵感!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5167602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档