从一种日期时间格式转换为另一种日期时间格式

时间:2019-05-30 15:58:24

标签: perl unix-timestamp

我想将作为Perl脚本参数的时间转换为另一种格式。

输入的格式为yyyyMMddHHmmss(例如20190101235010)。

输出应采用yyyy-MM-dd-HH:mm:ss的形式(例如2019-01-01-23:50:10)。

如果解决方案不使用Perl模块(POSIX除外),那就更好了。

2 个答案:

答案 0 :(得分:2)

这里有一些很好的选择:

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

答案 1 :(得分:1)

核心模块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";