perl-帮助格式化时间戳

时间:2010-08-19 20:34:29

标签: perl time date-format localtime

我正在使用以下时间戳格式读取日志数据:

Sat Aug 07 04:42:21 2010

我想把它转换成这样的东西:

20100807044221

在perl中执行此操作的最佳方法是什么?感谢。

4 个答案:

答案 0 :(得分:5)

使用Time::Piece。 (自Perl 5.10以来的核心模块。)

#!/usr/bin/perl

use strict;
use warnings;

use Time::Piece;

my $timestamp1 = 'Sat Aug 07 04:42:21 2010';
my $time = Time::Piece->strptime($timestamp1, '%a %b %d %H:%M:%S %Y');
my $timestamp2 = $time->strftime('%Y%m%d%H%M%S');

答案 1 :(得分:2)

这是Date::Parse的用途。

您可以指定语言和相应的日期格式,例如(从文档中复制):

        $lang = Date::Language->new('German');
        $lang->str2time("25 Jun 1996 21:09:55 +0100");

以上将返回“epoch”值,AKA unix时间值(您需要的)。

编辑:关于你的帖子,你只需要像yyyy-mmm-ddd等那样的规范日期字符串,因此你可以为此调用POSIX :: strftime。此外,您的日期格式为默认,因此您不需要语言调用:

...
use Date::Parse;
use POSIX qw(strftime);

my $sec = str2time('Sat Aug 07 04:42:21 2010');
my $ymd = strftime "%Y%m%d%H%M%S", gmtime($sec);

print "$ymd\n";
...

结果:

20100807024221

此致

RBO

答案 2 :(得分:2)

您可能未在所有系统上安装

Date::Parse,因此您可能需要使用以下代码段:


my ($sec, $min, $hour, $mday, $mon, $year) = localtime();

my $timestamp = sprintf( "%04d%02d%02d%02d%02d%02d",
                          $year+1900, $mon+1, $mday, $hour, $min, $sec);

print("Timestamp: $timestamp\n");

  

Timestamp: 20100819135418

答案 3 :(得分:1)

perl -MPOSIX -le'print strftime "%Y%m%d%H%M%S", localtime'

没关系,你需要先解析它。那只是以你的格式打印出来。