我如何转换" 11 am"和"晚上10点"进入" 11:00:00"和" 22:00:00"?在perl中有一种简单的方法来转换它吗?
答案 0 :(得分:4)
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
无法可靠地用于处理am
和pm
,因此您不应该使用它。
另一方面,Time :: Piece的行为与记录的不同,%p
将可靠地处理am
和pm
,因此它可以在技术上用于解决您的问题,尽管文档相反。
我个人避免那个巨大的混乱(以及所有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