Perl - конвертировать строку в дату и время - PullRequest
0 голосов
/ 26 июня 2019

Я работаю над сценарием, который извлекает данные из файла журнала.Файл журнала содержит строку даты в определенном формате:

20190626-102908.616319

Как только он проанализирован в моем коде, я хочу, чтобы дата была в другом формате:

2019-06-26-10:29:08

Я использовалDateTime::Format::Strptime и это прекрасно работает.

НО, требуется использовать другой способ, поскольку система, в которой будет использоваться скрипт, не позволяет устанавливать новые модули (да, я не могу установить дополнительные модули Perl).

Единственное, с чем я могу работать, это Date::Parse или Date::Format, но я не могу заставить его взаимодействовать.

С Date::Parse:

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

Iтолько пустой вывод.

Вызов Date::Format:

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

дает только 1970-01-01-00:00:00.

Может ли кто-нибудь указать мне правильное направление здесь?

Ответы [ 2 ]

2 голосов
/ 26 июня 2019

Time::Piece - это модуль, работающий в ядре с версии 5.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 голос
/ 26 июня 2019

С учетом 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
...