Perl格式号到时间?

时间:2016-04-22 19:42:28

标签: perl time format

我在.CSV文件中有两个字段我解析它应该代表时间。目前,它们是5位或6位数字(即85323将是8:53:23,或163211将是16:32:11)。我需要在那里扔冒号(:)。会像

strptime->strftime 

使用

Time::Piece 

为这样的事情工作?或者可能不是因为它们目前被视为VARCHAR加载到MySQL表中,而应该改为TIME类型。

3 个答案:

答案 0 :(得分:1)

尝试:

s/(\d{1,2})(\d{2})(\d{2})/$1:$2:$3/;

无需使用模块:)

答案 1 :(得分:1)

$ perl -wle 'print join(":", unpack("(A2)*", sprintf("%06d", $ARGV[0])))' 85323
08:53:23

$ perl -wle 'print join(":", unpack("(A2)*", sprintf("%06d", $ARGV[0])))' 163211
16:32:11

答案 2 :(得分:0)

提供的其他正则表达式解决方案不考虑添加前导零。

如果你有一个更新的perl支持/r替换上的s///返回选项,这将正常工作

$_ = sprintf('%06s', $_) =~ s/(..)(..)$/:$1:$2/r;

$_替换为您的变量名。

或者,如果你的perl没有/r选项,这也会做同样的事情......

( $t = sprintf('%06s', $t) ) =~ s/(..)(..)$/:$1:$2/;

当然你可以用Time::Piece达到同样的目的但是对于这个特殊的任务,我向你保证它更慢(更冗长)

$_ = Time::Piece->strptime(sprintf('%06s', $_), '%H%M%S')->hms;