Конвертировать из одного формата даты и времени в другой формат даты и времени - PullRequest
0 голосов
/ 30 мая 2019

Я хочу преобразовать время, которое берется в качестве аргумента скрипту Perl, в другой формат.

Ввод имеет вид yyyyMMddHHmmss (например, 20190101235010).

Выходные данные должны иметь форму yyyy-MM-dd-HH:mm:ss (например, 2019-01-01-23:50:10).

Было бы лучше, если бы решение не использовало Perl-модули (кроме POSIX).

Ответы [ 2 ]

2 голосов
/ 30 мая 2019

Вот несколько альтернатив, которые вполне подойдут:

my $output =
    sprintf "%s-%s-%s-%s:%s:%s",
       unpack 'a4 a2 a2 a2 a2 a2',
          $input;

& # x20;

my $output = $input =~ s/^(....)(..)(..)(..)(..)(..)\z/$1-$2-$3-$4:$5:$6/sr;

& # x20;

my $output = $input =~ /^(....)(..)(..)(..)(..)(..)\z/s
  ? "$1-$2-$3-$4:$5:$6"
  : die("Bad input\n");
1 голос
/ 30 мая 2019

Основной модуль Время :: Кусок делает это легко.

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";
...