我正在处理一个从日志文件中获取数据的脚本。日志文件包含特定格式的日期字符串:
20190626-102908.616319
通过代码解析之后,我希望日期采用其他格式:
2019-06-26-10:29:08
我使用过DateTime::Format::Strptime
,效果很好。
但是,要求是使用另一种方式,因为将使用脚本的系统不允许安装新模块(是的,我无法安装其他Perl模块)。
我唯一可以使用的是Date::Parse
或Date::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
。
有人可以在这里指出我正确的方向吗?
答案 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