在perl中将12小时时间格式转换为24小时格式?

时间:2017-05-09 09:46:54

标签: perl

我如何转换" 11 am"和"晚上10点"进入" 11:00:00"和" 22:00:00"?在perl中有一种简单的方法来转换它吗?

2 个答案:

答案 0 :(得分:4)

自2007年Perl 5.10以来,

Time::Piece一直是Perl的标准组成部分。

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

use Time::Piece;

for (qw[11am 10pm]) {
  my $time = Time::Piece->strptime($_, '%H%p');
  say $time->strftime('%H:%M:%S');
}

答案 1 :(得分:-1)

Time :: Piece的文档声称%p的定义基于您的语言环境。因此,根据文档,Time :: Piece的%p无法可靠地用于处理ampm,因此您不应该使用它。

另一方面,Time :: Piece的行为与记录的不同,%p将可靠地处理ampm,因此它可以在技术上用于解决您的问题,尽管文档相反。

我个人避免那个巨大的混乱(以及所有Time :: Piece的其他问题)并使用以下更轻,更简单和更清晰的代码:

my ($h, $ampm) = /^([0-9]+)(am|pm)\z/;
$h = 0 if $h == 12;
$h += 12 if $ampm eq 'pm';
my $hms = sprintf("%d:00:00", $h);   # or %02d if you want 00:00:00