Я хочу преобразовать время, которое берется в качестве аргумента скрипту Perl, в другой формат.
Вход имеет форму yyyyMMddHHmmss
(например, 20190101235010
).
Выходные данные должны иметь форму yyyy-MM-dd-HH:mm:ss
(например, 2019-01-01-23:50:10
).
Было бы лучше, если бы решение не использовало модули Perl (кроме POSIX).
2 ответа
Основной модуль Time :: Piece делает это легко.
use strict;
use warnings;
use Time::Piece;
# if input is the format you specified:
my $input = '20190101235010';
my $time = Time::Piece->strptime($input, '%Y%m%d%H%M%S');
print $time->strftime('%Y-%m-%d-%H:%M:%S'), "\n";
# if input is a unix epoch timestamp:
my $input = time;
my $time = gmtime $input;
print $time->strftime('%Y-%m-%d-%H:%M:%S'), "\n";
Вот несколько альтернатив, которые будут весьма полезны:
my $output =
sprintf "%s-%s-%s-%s:%s:%s",
unpack 'a4 a2 a2 a2 a2 a2',
$input;
my $output = $input =~ s/^(....)(..)(..)(..)(..)(..)\z/$1-$2-$3-$4:$5:$6/sr;
my $output = $input =~ /^(....)(..)(..)(..)(..)(..)\z/s
? "$1-$2-$3-$4:$5:$6"
: die("Bad input\n");
Похожие вопросы
Новые вопросы
perl
Perl - это процедурный высокоуровневый динамический язык программирования общего назначения, известный своей собственной поддержкой регулярных выражений и возможностей синтаксического анализа строк. Пожалуйста, используйте этот тег для вопросов о Perl в целом. Для вещей, связанных с новым (но связанным) языком Raku (ранее «Perl 6»), используйте тег raku. Для регулярных выражений в стиле Perl на других языках используйте тег regex или, если они основаны на библиотеке PCRE, тег pcre.