Perl-将字符串转换为日期时间

时间:2019-06-26 14:18:47

标签: perl datetime data-conversion

我正在处理一个从日志文件中获取数据的脚本。日志文件包含特定格式的日期字符串:

20190626-102908.616319

通过代码解析之后,我希望日期采用其他格式:

2019-06-26-10:29:08

我使用过DateTime::Format::Strptime,效果很好。

但是,要求是使用另一种方式,因为将使用脚本的系统不允许安装新模块(是的,我无法安装其他Perl模块)。

我唯一可以使用的是Date::ParseDate::Format,但我无法配合。

使用Date::Parse

my $time2 = str2time($chunks[0]);

我只会得到空的输出。

呼叫Date::Format

my $time2 = time2str("%Y-%m-%d-%H:%M:%S\n", $chunks[0]);

仅提供1970-01-01-00:00:00

有人可以在这里指出我正确的方向吗?

2 个答案:

答案 0 :(得分:2)

Time::Piece是v5.10.0以来的核心模块,并具有可比较的日期解析/格式化API:

use strict; 
use warnings; 

use feature qw(say);
use Time::Piece; 

my $t = Time::Piece->strptime("20190626-102908.616319","%Y%m%d-%H%M%S");
say $t->strftime("%Y-%m-%d-%H:%M:%S");
# 2019-06-26-10:29:08

答案 1 :(得分:1)

给出20190626-102908.616319作为$ string的内容

my ($date,$time) = split /-/, $string; # Separate time from date
$time = int $time; # Drop decimal parts of a second
my @date = $date =~ /([0-9]{4})([0-9]{2})([0-9]{2})/; # Split date into year month day
my @time = $time =~ /([0-9]{2})([0-9]{2})([0-9]{2})/; # Split time into hour month second
my $formatted_date = join('-', @date) . '-' . join(':', @time); # Put it all back together